我把自己的一个 scrapy 项目部署到 Ubuntu16.04 服务器上,我自己的开发环境也是 Ubuntu16.04 ,在自己的开发环境上是没事的,我直接执行 scrapy crawl xxx 是可以的,但是我写了一个 py 文件来循环执行 scrapy crawl xxx 这个命令,我通过这个 py 文件来执行 scrapy 就出现 UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128)的错误了,而且我也加了 sys.stdout = codecs.getwriter('utf-8')(sys.stdout.detach())这句还是不行,以下是我的这个 py 文件:
# -*- coding: utf-8 -*-
import os
import multiprocessing
import time
import sys
import codecs
sys.stdout = codecs.getwriter('utf-8')(sys.stdout.detach())
print('中文')
def start_spider_collect():
# os.system('scrapy crawl xxx')
# 获取 scrapy 的 spider 列表(获取命令行执行后的输出结果)
while True:
result = os.popen('scrapy list')
res = result.read()
for line in res.splitlines():
if str(line).startswith('spider_collect'):
print(line)
print('sleep 10s')
time.sleep(10)
os.system('scrapy crawl ' + line)
if __name__ == '__main__':
multiprocessing.Process(target=start_spider_collect, name='process: start_spider_collect').start()
请问这是怎么回事?
# -*- coding: utf-8 -*-
import os
import multiprocessing
import time
import sys
import codecs
sys.stdout = codecs.getwriter('utf-8')(sys.stdout.detach())
print('中文')
def start_spider_collect():
# os.system('scrapy crawl xxx')
# 获取 scrapy 的 spider 列表(获取命令行执行后的输出结果)
while True:
result = os.popen('scrapy list')
res = result.read()
for line in res.splitlines():
if str(line).startswith('spider_collect'):
print(line)
print('sleep 10s')
time.sleep(10)
os.system('scrapy crawl ' + line)
if __name__ == '__main__':
multiprocessing.Process(target=start_spider_collect, name='process: start_spider_collect').start()
请问这是怎么回事?