2015-02-05 12 views
6

पर तर्क पास करें मुझे पता है कि आदेश पंक्ति से एक स्केपर मकड़ी चलाने के दौरान तर्क कैसे पारित करें। हालांकि, मुझे scrapy की cmdline.execute() का उपयोग करके प्रोग्रामिंग रूप से स्क्रिप्ट से चलाने की कोशिश करते समय समस्याएं आ रही हैं।स्केपर: cmdline.execute()

तर्क मैं पारित करने के लिए की जरूरत है सिर्फ इस तरह, सूची है कि मैं पहले से तार के रूप में स्वरूपित हैं:

numbers = "one,two,three,four,five" 
colors = "red,blue,black,yellow,pink" 

cmdline.execute('scrapy crawl myspider -a arg1='+numbers+' -a arg2='+colors) 

और मकड़ी ...

class MySpider(Spider): 

     name = "myS" 

     def __init__(self, arg1, arg2): 
      super(MySpider, self).__init__() 

#Rest of the code 

जब मैं इसे चलाने है हालांकि, मुझे यह त्रुटि मिलती है:

Traceback (most recent call last): 
    File "C:/Users/ME/projects/script.py", line 207, in run 
    cmdline.execute("scrapy crawl myS -a arg1="+numbers+" -a data="+colors) 
    File "C:\Python27\lib\site-packages\scrapy\cmdline.py", line 123, in execute 
    cmdname = _pop_command_name(argv) 
    File "C:\Python27\lib\site-packages\scrapy\cmdline.py", line 57, in _pop_command_name 
    del argv[i] 
TypeError: 'str' object doesn't support item deletion 

कोई विचार?

ओएस: विंडोज 7; पायथन संस्करण: 2.7.8

उत्तर

7

execute() फ़ंक्शन एक स्ट्रिंग नहीं, तर्कों की एक सूची की अपेक्षा करता है। इसे आज़माएं:

cmdline.execute([ 
    'scrapy', 'crawl', 'myspider', 
    '-a', 'arg1='+numbers, '-a', 'arg2='+colors]) 
+0

यह काम किया! शीघ्र उत्तर के लिए धन्यवाद। – pylund

2

क्या आप .split() को याद कर रहे हैं? निम्नलिखित का प्रयास करें और देखें कि क्या होता है।

cmdline.execute("scrapy crawl myspider -a arg1="+numbers+" -a arg2=" + colors + "".split()) 
+0

क्षमा करें, यह मेरे लिए काम नहीं करता है। यह लौटा "टाइप एरर: 'str' और 'list' ऑब्जेक्ट्स को संयोजित नहीं कर सकता" – pylund

+1

मैंने इसे संपादित किया है, अब इसे काम करना चाहिए – VinGarcia

संबंधित मुद्दे