2013-10-30 12 views
8

मुझे बस चीजों को सही तरीके से करने के तरीके पर एक संकेत की आवश्यकता है।subprocess.Popen: तर्क के रूप में एक सूची को कैसे पास करें

कहें कि मेरे पास script.py नामक एक स्क्रिप्ट है जो नामों की सूची का उपयोग तर्क ["name1", "name2", आदि] के रूप में करती है।

मैं इस स्क्रिप्ट को उपप्रोसेसर मॉड्यूल का उपयोग करके किसी अन्य स्क्रिप्ट से कॉल करना चाहता हूं।

myList = ["name1", "name2", "name3"] 
subprocess.Popen(["python", "script.py", myList]) 

पाठ्यक्रम वह काम नहीं करता क्योंकि subprocess.Popen विधि तर्कों के रूप स्ट्रिंग की एक सूची की आवश्यकता के: तो मुझे क्या करना चाहते हैं निम्नलिखित है। तो मैं निम्नलिखित कर रही विचार: अब प्रक्रिया प्रारंभ होती है

subprocess.Popen(["python", "script.py", str(myList)]) 

लेकिन यह काम नहीं करता है, क्योंकि यह तर्क के रूप में एक स्ट्रिंग और नहीं एक सूची है। मुझे इसे ठीक से कैसे ठीक करना चाहिए?

उत्तर

19

+ ऑपरेटर का उपयोग करके उन्हें संयोजित करें।

myList = ["name1", "name2", "name3"] 
subprocess.Popen(["python", "script.py"] + myList) 

Btw, आप एक ही अजगर प्रोग्राम का उपयोग करना चाहते हैं, sys.executable साथ "python" बदलें।

+0

या '.extend()' यदि आप अतिरिक्त तर्कों के प्रकार के बारे में अनिश्चित हैं। –

+0

@ निकलासआर, या '+ सूची (myList) ' – falsetru

+1

' विस्तार 'केवल तभी उपयोगी है जब आप कॉल से पहले नामित सूची संशोधित करते हैं। 'subprocess.Popen ([" पायथन "," script.py "]। (myList) का विस्तार करें)' 'कोई नहीं '(' विस्तार' का वापसी मूल्य) 'Popen() 'के पहले और एकमात्र तर्क के रूप में होगा। – chepner

1

त्वरित उत्तर falsetru के लिए धन्यवाद। यह सीधे काम नहीं करता है लेकिन मैं समझता हूं कि कैसे करना है। तुम सुझाव कर के बराबर है:

subprocess.Popen(["Python","script.py","name1","name2","name3"]) 

मैं कहां से 3 तर्क है कि तार अपने मूल सूची में शामिल हैं।

सभी मैं अपने script.py फ़ाइल में क्या करने की जरूरत प्रत्येक तर्क से एक नई सूची कर रही द्वारा प्राप्त निर्माण करने के लिए निम्नलिखित है:

myList = sys.argv[1:] 

MyList अब एक मैं शुरू में था की तुलना में एक ही है!

["name1","name2","name3"] 

पता नहीं क्यों मैंने इसके बारे में पहले नहीं सोचा था!

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