Interceptação em tempo real de stdout de outro processo em Python
Eu gostaria de executar um processo do sistema, interceptar a saída e modificá-lo em tempo real, linha por linha, em um script Python.
Minha melhor tentativa, que aguarda a conclusão do processo antes da impressão, é:
#!/usr/bin/env python
import subprocess
cmd = "waitsome.py"
proc = subprocess.Popen(cmd, shell=True, bufsize=256, stdout=subprocess.PIPE)
for line in proc.stdout:
print ">>> " + line.rstrip()
O roteirowaitsome.py
simplesmente imprime uma linha a cada meio segundo:
#!/usr/bin/env python
import time
from sys import stdout
print "Starting"
for i in range(0,20):
time.sleep(0.5)
print "Hello, iteration", i
stdout.flush()
Existe uma solução fácil para obtersubprocess
permitir iterar sobre a saída em tempo real? Eu tenho que usar threads?
Era uma vez, eu escrevi em Perl, e isso foi um pedaço de bolo:
open(CMD, "waitsome.py |");
while (<CMD>) {
print ">>> $_";
}
close(CMD);