python - guia - Capturar salida de subproceso
guia qgis (2)
Esta pregunta ya tiene una respuesta aquí:
Aprendí que al ejecutar comandos en Python, debería usar subproceso. Lo que estoy tratando de lograr es codificar un archivo a través de ffmpeg y observar la salida del programa hasta que el archivo esté listo. Ffmpeg registra el progreso a stderr.
Si intento algo como esto:
child = subprocess.Popen(command, shell=True, stderr=subprocess.PIPE)
complete = False
while not complete:
stderr = child.communicate()
# Get progress
print "Progress here later"
if child.poll() is not None:
complete = True
time.sleep(2)
el programa no continúa después de llamar a child.communicate () y espera a que se complete el comando. ¿Hay alguna otra manera de seguir la salida?
comunicará () hasta que el proceso hijo se devuelva, de modo que el resto de las líneas de su bucle solo se ejecutarán una vez que el proceso hijo haya terminado de ejecutarse. La lectura desde stderr también se bloqueará, a menos que lea un personaje por otro así:
import subprocess
import sys
child = subprocess.Popen(command, shell=True, stderr=subprocess.PIPE)
while True:
out = child.stderr.read(1)
if out == '''' and child.poll() != None:
break
if out != '''':
sys.stdout.write(out)
sys.stdout.flush()
Esto le proporcionará salida en tiempo real. Tomado de la respuesta de Nadia here .
.communicate()
"Lea los datos de stdout y stderr, hasta que se alcance el final del archivo. Espere a que finalice el proceso".
En su lugar, debería poder leer desde child.stderr
como un archivo normal.