2013-08-19 4 views
2

У меня проблемы. Я хочу запустить команду оболочки в Python в определенном каталоге. На основе кода, который я нашел в Интернете, мне нужны следующие включения:Сценарий Python для запуска команды оболочки

import os 
import subprocess 
import shlex 

, а затем сам код ниже

os.chdir('/etc/test/') 
cmd = 'scrapy crawl test' 
subprocess.call(shlex.split(cmd)) 

Как это выглядит, как я пытаюсь выполнить команду «SCRAPY проверка обхода "в каталоге/etc/test /. Когда я запускаю это вручную с помощью терминала, кажется, работает хорошо, однако, когда я запускаю его с помощью этого кода Python дает мне ошибку:

INFO Exception occured while scraping: [Errno 2] No such file or directory

кто-нибудь сможет сказать мне, если мой код неверен, или если я возможно, это неправильный путь.

+0

Есть ли дополнительная информация о трассировке или только одна ошибка? – abarnert

+1

В качестве побочного примечания 'cmd = ['scrapy', 'crawl', 'test']' then 'subprocess.call (cmd)' проще и, вероятно, сложнее ошибиться; не нужно использовать 'shlex' здесь. Но это не повлияет на проблему, которую вы пытаетесь решить. – abarnert

+0

@abamert Я не могу найти дальнейшую информацию о трассировке. Я боюсь. Будет ли мне еще нужна команда os.chdir, а также в вашем случае? – Jimmy

ответ

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 

Существует множество примеров там:

Надеюсь, что это помогает.

Смежные вопросы