guia python subprocess

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.