मुझे आशा है कि यह एक साधारण पायथन प्रश्न है।उपप्रोसेसर क्यों नहीं है। पोपेन (...) हमेशा वापस आते हैं?
जब मैं अजगर दुभाषिया में निम्न प्रयास करें:
>>> import process
>>> def test(cmd):
... p = subprocess.Popen(cmd)
...
>>> test(['ls', '-l'])
यह ls -l
चलेगा, लेकिन मैं "वापसी" हिट करने के लिए एक नया >>> शीघ्र प्राप्त करने की आवश्यकता।
, जब मैं निम्न प्रयास करें:
>>> import process
>>> def test(cmd):
... p = subprocess.Popen(cmd)
... p.wait()
...
>>> test(['ls', '-l'])
फिर ls -l
एक >>> शीघ्र तुरंत वर्तमान के साथ चलाया जाएगा।
एक अन्य भिन्नता:
>>> import process
>>> def test(cmd):
... p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
...
>>> test(['ls', '-l'])
यह मैं एक तत्काल नई शीघ्र दे देंगे।
अंतिम उदाहरण जो मैं चाहता हूं उसके सबसे नज़दीक है। मेरा लक्ष्य एक बच्चे की प्रक्रिया शुरू करना है, इसे खत्म करने के लिए प्रतीक्षा करें और उसके बाद p.stdout
का जिक्र करते हुए मेरी मूल प्रक्रिया में अपने stdout का उपयोग करें जबकि stderr को अन्यथा कहीं भी प्रिंट करें।
अभी मेरे वास्तविक एप्लिकेशन में, अंतिम संस्करण केवल p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
पर p.wait()
के साथ या बिना लटकता है।
धन्यवाद,
चार्ली
उप कमांड के किसी भी स्टड हैंडलर को रीडायरेक्ट किए बिना, '.communicate()' कुछ भी उपयोगी नहीं होगा। इसे 'प्रतीक्षा()' कॉल के साथ प्रतिस्थापित करना बेहतर हो सकता है। – glglgl