我遇到了一些麻烦。我想在Python中的特定目录中运行shell命令。基于我在互联网上找到的代码,我需要以下内容:
import os
import subprocess
import shlex
然后代码本身在
之下os.chdir('/etc/test/')
cmd = 'scrapy crawl test'
subprocess.call(shlex.split(cmd))
看起来,我正在尝试在/ etc / test /目录中运行命令“scrapy crawl test”。当我用终端手动运行它似乎工作正常但是当我用这个python代码运行它时它给了我一个错误:
INFO在抓取时发生异常:[Errno 2]没有这样的文件或 目录
是否有人能够告诉我我的代码是否不正确,或者我是否采取了错误的方式。
答案 0 :(得分:3)
为什么使用子进程?从脚本运行Scrapy
的常见做法是使用扭曲的reactor
。取自docs:
from twisted.internet import reactor
from scrapy.crawler import Crawler
from scrapy.settings import Settings
from scrapy import log
from testspiders.spiders.followall import FollowAllSpider
spider = FollowAllSpider(domain='scrapinghub.com')
crawler = Crawler(Settings())
crawler.configure()
crawler.crawl(spider)
crawler.start()
log.start()
reactor.run() # the script will block here
有很多例子:
希望有所帮助。