Possible Duplicate:
Wrap subprocess' stdout/stderrक्या आप सामान्य रूप से एक अजगर सबप्रोसेस आउटपुट स्टडआउट और स्टेडर बना सकते हैं, लेकिन आउटपुट को स्ट्रिंग के रूप में भी कैप्चर कर सकते हैं?
this question में, hanan-n से पूछा कि क्या यह एक अजगर उपप्रक्रिया कि stdout में आउटपुट करते हुए भी बाद में प्रसंस्करण के लिए एक स्ट्रिंग में उत्पादन रखने के लिए संभव था। ,
output = []
p = subprocess.Popen(["the", "command"], stdout=subprocess.PIPE)
for line in iter(p.stdout.readline, ''):
print(line)
output.append(line)
हालांकि, इस समाधान इस मामले में जहां आप दोनों stdout और stderr के लिए ऐसा करना चाहते हैं के लिए सामान्य नहीं है, जबकि संतोषजनक: इस मामले में समाधान हर उत्पादन लाइन पर पाश के लिए गया था और उन्हें मैन्युअल रूप से प्रिंट निम्नलिखित:
- stdout/stderr से उत्पादन माता पिता प्रक्रिया के पास जाना चाहिए 'stdout/stderr क्रमशः
- उत्पादन जितना संभव हो उतना वास्तविक समय में किया जाना चाहिए (लेकिन मैं केवल पर तार के लिए उपयोग की जरूरत है अंत)
- ओ stdout और stderr लाइनों के बीच rder बदला नहीं जाना चाहिए (मुझे पूरा यकीन नहीं है कि यह कैसे काम करेगा अगर subprocess अलग अंतराल पर अपने stdout और stderr कैश flushes; चलो अब है कि हम अच्छा हिस्सा है कि पूरा पंक्तियाँ हो में सब कुछ प्राप्त करने के लिए मान लें?)
मैं subprocess documentation के माध्यम से देखा, लेकिन कुछ भी है कि इस लक्ष्य को हासिल कर सकते हैं नहीं मिल सका। सबसे नज़दीक मुझे मिल सकता है stderr=subprocess.stdout
जोड़ना और उपरोक्त के समान समाधान का उपयोग करना है, लेकिन फिर हम नियमित आउटपुट और त्रुटियों के बीच भेद खो देते हैं। कोई विचार? मैं समाधान का अनुमान लगा रहा हूं - यदि कोई है - इसमें p.stdout
और p.stderr
पर एसिंक्रोनस पढ़ने को शामिल किया जाएगा।
p = subprocess.Popen(["the", "command"])
p.wait() # while p runs, the command's stdout and stderr should behave as usual
p_stdout = p.stdout.read() # unfortunately, this will return '' unless you use subprocess.PIPE
p_stderr = p.stderr.read() # ditto
[do something with p_stdout and p_stderr]
मुझे नहीं लगता कि यह तकनीक (किसी भी आईओ फ़ंक्शन और स्ट्रीम ऑब्जेक्ट्स को लपेटना) सामान्यीकृत नहीं है? – ninjagecko
आप कैसे सुझाव देते हैं कि मैं वास्तविक समय में stdout और stderr पर प्रिंट करने के लिए उपप्रोसेस प्राप्त करता हूं, फिर भी अंत में एक स्ट्रिंग में आउटपुट प्राप्त करते समय, फिर? – pflaquerre