चल रहा है यह मेरा उपप्रक्रिया है:एक उपप्रक्रिया की stdout को बाधित करना, जबकि यह
import time, sys
for i in range(200):
sys.stdout.write('reading %i\n'%i)
time.sleep(.02)
और यह नियंत्रित करने और उपप्रक्रिया के उत्पादन को संशोधित स्क्रिप्ट है:
import subprocess, time, sys
print 'starting'
proc = subprocess.Popen(
'c:/test_apps/testcr.py',
shell=True,
stdin=subprocess.PIPE,
stdout=subprocess.PIPE )
print 'process created'
while True:
#next_line = proc.communicate()[0]
next_line = proc.stdout.readline()
if next_line == '' and proc.poll() != None:
break
sys.stdout.write(next_line)
sys.stdout.flush()
print 'done'
क्यों readline
और है communicate
प्रक्रिया पूरी होने तक प्रतीक्षा कर रही है? क्या उपप्रोसेस 'स्टडआउट रीयल-टाइम पास (और संशोधित) करने का कोई आसान तरीका है?
बीटीडब्ल्यू, मैंने this देखा है, लेकिन मुझे लॉगिंग सुविधाओं की आवश्यकता नहीं है (और इसे अधिक समझने की परेशानी नहीं है)।
मैं विंडोज एक्सपी पर हूं।
संबंधित:
मैं निम्नलिखित कोड, ActiveState पर कुछ पदों से प्रेरित इस्तेमाल किया [? अजगर प्रिंट के उत्पादन में फ्लश करने के लिए कैसे] (http://stackoverflow.com/q/230751/95735) –