Si ceci est mon sous-processus:Intercepter stdout d'un sous-processus en cours d'exécution
import time, sys
for i in range(200):
sys.stdout.write('reading %i\n'%i)
time.sleep(.02)
Et c'est le script de contrôle et de modification de la sortie du sous-processus:
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'
Pourquoi readline
et communicate
attendre jusqu'à ce que le processus soit terminé? Existe-t-il un moyen simple de passer (et de modifier) le sous-processus 'stdout' en temps réel? Par ailleurs, j'ai vu this, mais je n'ai pas besoin des fonctionnalités de journalisation (et je n'ai pas vraiment compris).
Je suis sous Windows XP.
connexes: [? Comment vider la sortie de l'impression Python] (http://stackoverflow.com/q/230751/95735) –