2015-05-22 2 views
0

Как я могу запустить 2 паука в серии? Запуск этого запускает первый паук, но не второй. Есть ли способ, чтобы ждать, пока один, чтобы закончить ?:scrapy running 2 spiders

from scrapy import cmdline 

cmdline.execute("scrapy crawl spider1".split()) 

cmdline.execute("scrapy crawl spider2".split()) 

edit1: Я изменил его, используя .wait() для:

spider1 = subprocess.Popen(cmdline.execute("scrapy crawl spider1".split())) 
spider1.wait() 

spider2 = subprocess.Popen(cmdline.execute("scrapy crawl spider2".split())) 
spider2.wait() 

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

Edit2:

Traceback (most recent call last): 
    File "/usr/bin/scrapy", line 9, in <module> 
    load_entry_point('Scrapy==0.24.6', 'console_scripts', 'scrapy')() 
    File "/usr/lib/pymodules/python2.7/scrapy/cmdline.py", line 109, in execute 
    settings = get_project_settings() 
    File "/usr/lib/pymodules/python2.7/scrapy/utils/project.py", line 60, in get_project_settings 
    settings.setmodule(settings_module_path, priority='project') 
    File "/usr/lib/pymodules/python2.7/scrapy/settings/__init__.py", line 109, in setmodule 
    module = import_module(module) 
    File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module 
    __import__(name) 
ImportError: No module named settings 
1 
+1

вы хотите им работать одновременно, или второй должен выполняться, когда первый Закончили ? –

+0

второй пробег, когда первый заканчивается. – user3831011

ответ

2

Я хотел бы использовать подпроцесс, который имеет .wait() функцию. Или вы можете использовать .call() в подпроцессе, который автоматически ждет и распечатает его, чтобы получить текст терминала от вызова scrapy crawl.

spider1 = subprocess.call(["scrapy", "crawl", "spider1"]) 
print spider1 

spider2 = subprocess.call(["scrapy", "crawl", "spider2"]) 
print spider2 

Этот метод будет автоматически ждать, пока первый паук не будет сделан, а затем вызвать секунды паук

+0

.call просто рисует кучу ошибок, поэтому я пошел с .wait(), но я думаю, что сделал это неправильно. Я редактировал вопрос. – user3831011

+0

@ user3831011 Посмотрите на мой пример ответов, вам больше не нужен cmdline.exectue(). Просто посмотрите на мой пример и попробуйте вот так: – heinst

+0

@ user3831011, пожалуйста, посмотрите на ответ сейчас, это должно быть то, что вы ищете – heinst