Taymon के जवाब कि निष्क्रिय के stdin/stdout में आपके सवाल का सीधे संबोधित करते हैं वास्तव में फाइल की तरह वस्तुओं और नहीं मानक फ़ाइल एक सांत्वना/टर्मिनल के साथ जुड़े धाराओं कर रहे हैं। इसके अलावा, विंडोज आईडीईई में pythonw.exe के साथ चलता है, जिसमें एक संलग्न Win32 कंसोल भी नहीं है।
यह कहा गया है कि, यदि आपको वास्तविक समय में उपयोगकर्ता को मुद्रित करने के लिए किसी प्रोग्राम से आउटपुट की आवश्यकता है, तो कई मामलों में (लेकिन सभी नहीं) आप आउटपुट लाइन को लाइन से पढ़ सकते हैं और तदनुसार इसे गूंज सकते हैं। विंडोज आईडीएलई में मेरे लिए निम्नलिखित काम करता है। यह लाइन द्वारा एक पाइप stdout
लाइन से पढ़ने का प्रदर्शन करता है। यह भी पता चलता है तो क्या होता है प्रक्रिया पाइप, जिसमें मामले readline
जब तक या तो बफर भरा है या पाइप बंद कर देता है को अवरुद्ध कर देगा बफ़र्स। यह बफरिंग मैन्युअल कुछ कार्यक्रमों (जैसे अजगर दुभाषिया के -u विकल्प के रूप में) के साथ निष्क्रिय किया जा सकता है, और वहाँ इस तरह के रूप में stdbuf यूनिक्स के लिए कामकाज से जुड़े हैं।
test1.py
import sys
import subprocess
def test(cmd):
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stdin=subprocess.PIPE,
stderr=subprocess.PIPE)
it = iter(p.stdout.readline, b'')
for line in it:
print(line.rstrip().decode('ascii'))
print('Testing buffered subprocess...')
test([sys.executable, 'test2.py'])
print('\nTesting unbuffered subprocess...')
#-u: unbuffered binary stdout and stderr
test([sys.executable, '-u', 'test2.py'])
test2.py:
import time
for i in range(5):
print(i)
time.sleep(1)
निष्क्रिय में उत्पादन एक देरी और दूसरे के बाद सभी को एक बार मुद्रित अंक के पहले सेट के साथ, निम्नलिखित होना चाहिए लाइन द्वारा मुद्रित लाइन सेट करें।
Testing buffered subprocess...
0
1
2
3
4
Testing unbuffered subprocess...
0
1
2
3
4
विंडोज आईडीईई पर pythonw.exe के माध्यम से चलता है, इसलिए इसमें कंसोल 'stdin', 'stdout', और' stderr' फ़ाइल हैंडल भी नहीं है। – eryksun
लेकिन क्या यह पाइथन को करने में एक तरीका है? – dmjalund