जवाबों:
आप की जाँच तो अजगर किए गए दस्तावेज़ों की उपप्रक्रिया अनुभाग , तो आप देखेंगे कि कैसे को बदलने के लिए का एक उदाहरण है os.system()
के साथ subprocess.Popen()
:
sts = os.system("mycmd" + " myarg")
... वही काम करता है ...
sts = Popen("mycmd" + " myarg", shell=True).wait()
"बेहतर" कोड अधिक जटिल दिखता है, लेकिन यह बेहतर है क्योंकि एक बार जब आप जानते हैं subprocess.Popen()
, तो आपको किसी और चीज की आवश्यकता नहीं है। subprocess.Popen()
कई अन्य उपकरणों की जगह (os.system()
बस उन में से एक है) जो तीन अन्य पायथन मॉड्यूल में बिखरे हुए थे।
यदि यह मदद करता है, तो subprocess.Popen()
एक बहुत ही लचीले के रूप में सोचें os.system()
।
shell=True
। इस विकल्प के होने subprocess.Popen()
और इसके सहायक कार्यों के लाभों में से एक है ।
os.system
और subprocess.call/popen/run
ब्लॉक / कमांड खत्म होने का इंतजार करते हैं: stackoverflow.com/a/14059648/4752883
os.system
यूनिक्स system
कमांड के बराबर है , जबकि एक आसान और नियंत्रणीय इंटरफ़ेस के साथ कमांड subprocess
द्वारा प्रदान की गई कई सुविधाएं प्रदान करने के लिए एक सहायक मॉड्यूल बनाया गया था Popen
। जिन्हें यूनिक्स पॉपेन कमांड के समान डिजाइन किया गया था।
system()
कमांड में निर्दिष्ट एक कमांड को कॉल करके निष्पादित करता है/bin/sh -c command
, और कमांड पूरा होने के बाद रिटर्न करता है
जहाँ तक:
popen()
समारोह एक पाइप बनाने, forking, और खोल लागू द्वारा एक प्रक्रिया खोलता है।
यदि आप सोच रहे हैं कि किसका उपयोग करना है, तो subprocess
निश्चित रूप से उपयोग करें क्योंकि आपके पास निष्पादन के लिए सभी सुविधाएं हैं, साथ ही प्रक्रिया पर अतिरिक्त नियंत्रण भी है।
जब खिड़कियों पर अजगर (CPython) चल रहा <built-in function system>
os.system पर्दे के तहत निष्पादित करेंगे _wsystem जबकि यदि आप एक गैर विंडोज़ ओएस का उपयोग कर रहे हैं, यह इस्तेमाल करेंगे प्रणाली ।
इसके विपरीत, पॉपेन को विंडो और _posixsubprocess.fork_exec पर CreateProcess का उपयोग करना चाहिए -आधारित ऑपरेटिंग-सिस्टम में ।
उस ने कहा, एक महत्वपूर्ण टुकड़ा os.system डॉक्स से आता है , जो कहता है:
सबप्रोसेस मॉड्यूल नई प्रक्रियाओं को पैदा करने और उनके परिणामों को पुनः प्राप्त करने के लिए अधिक शक्तिशाली सुविधाएं प्रदान करता है; इस फ़ंक्शन का उपयोग करने के लिए उस मॉड्यूल का उपयोग करना बेहतर है। कुछ सहायक व्यंजनों के लिए सबप्रोसेस दस्तावेज़ में सबप्रोसेस मॉड्यूल खंड के साथ पुराने फ़ंक्शंस को देखें।
sts = p.wait()
अंतिम पंक्ति के बजाय भी उपयोग कर सकते हैं ।