Se questo è il mio sottoprocesso:Intercettare stdout di un sottoprocesso mentre è in esecuzione
import time, sys
for i in range(200):
sys.stdout.write('reading %i\n'%i)
time.sleep(.02)
E questo è lo script di controllare e modificare l'uscita del sottoprocesso:
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'
Perché readline
e communicate
in attesa che il processo sia terminato? C'è un modo semplice per passare (e modificare) il subprocesso 'stdout in tempo reale?
BTW, ho visto this, ma non ho bisogno delle funzionalità di registrazione (e non mi sono preoccupato di capirlo molto).
Sono su Windows XP.
correlati: [? Come svuotare l'uscita di Python print] (http://stackoverflow.com/q/230751/95735) –