यदि आप कमांडलाइन उपकरण को अलग प्रक्रियाओं के रूप में चलाने के लिए चाहते हैं, तो बस os.system
(या बेहतर: subprocess
मॉड्यूल) का उपयोग अतुल्यकालिक रूप से शुरू करने के लिए करें। यूनिक्स पर/linux/MacOS:
subprocess.call("command -flags arguments &", shell=True)
विंडोज पर:
subprocess.call("start command -flags arguments", shell=True)
जब एक आदेश समाप्त हो गया है जानने के लिए के रूप में: यूनिक्स के अंतर्गत आप wait
आदि के साथ स्थापित हो सकता है, लेकिन अगर आप कर रहे हैं कमांडलाइन स्क्रिप्ट लिखना, मैं बस उन्हें एक फ़ाइल में एक संदेश लिखूंगा, और कॉलिंग पायथन स्क्रिप्ट से फ़ाइल की निगरानी करूंगा।
@ जेम्स यंगमैन ने आपके दूसरे प्रश्न का समाधान प्रस्तावित किया: सिंक्रनाइज़ेशन। यदि आप अपनी प्रक्रियाओं को पायथन से नियंत्रित करना चाहते हैं, तो आप उन्हें पॉपन के साथ असीमित रूप से शुरू कर सकते हैं।
p1 = subprocess.Popen("command1 -flags arguments")
p2 = subprocess.Popen("command2 -flags arguments")
सावधान रहें कि यदि आप popen का उपयोग करें और अपनी प्रक्रियाओं stdout में काफी मात्रा में डेटा लिखते हैं, अपने कार्यक्रम गतिरोध होगा। सभी आउटपुट को लॉग फ़ाइल में रीडायरेक्ट करना सुनिश्चित करें।
p1
और p2
वे ऑब्जेक्ट्स हैं जिनका उपयोग आप अपनी प्रक्रियाओं पर टैब रखने के लिए कर सकते हैं। p1.poll()
अवरुद्ध नहीं होगा, लेकिन अगर प्रक्रिया अभी भी चल रही है तो कोई भी वापस नहीं आएगा। जब यह किया जाता है तो यह बाहर निकलने की स्थिति वापस कर देगा, ताकि आप जांच सकें कि यह शून्य है या नहीं।
for proc in [p1, p2]:
time.sleep(60)
status = proc.poll()
if status == None:
continue
elif status == 0:
# harvest the answers
else:
print "command1 failed with status", status
ऊपर सिर्फ एक मॉडल है: लिखित रूप में, यह बाहर निकलने कभी नहीं होगा, और यह "कटाई" पूरा प्रक्रियाओं के परिणाम रखेंगे। लेकिन मुझे विश्वास है कि आपको विचार मिल गया है।
अजगर [ 'threading'] (http://docs.python.org/library/threading.html) के लिए अच्छा समर्थन और है [' multiprocessing'] (http://docs.python.org/ पुस्तकालय/multiprocessing.html)। उन लोगों के साथ आपकी विशिष्ट समस्या क्या है? –