2011-05-19 19 views
7

Estoy utilizando el módulo de subproceso para ejecutar binarios de python.Salida de subproceso Python a stdout

para capturar la salida producida por el binario, estoy usando:

proc = subprocess.Popen (command_args, shell=False, stdout=subprocess.PIPE) 
out = proc.communicate()[0] 
#print the output of the child process to stdout 
print (out) 

Lo que esto hace es imprimir la salida del proceso después de que haya terminado de ejecutarse. ¿De todos modos puedo imprimir esta salida a stdout MIENTRAS el programa se está ejecutando? Realmente necesito ver cuál es el resultado porque estos programas pueden ejecutarse durante mucho tiempo.

Gracias por la ayuda.

+0

chicos importa, creo que he encontrado la solución: 'Básicamente, usted tiene 3 opciones: Uso enhebrado a leer en otro hilo sin bloquear el hilo principal. seleccione en stdout, stderr en lugar de comunicar. De esta forma, puede leer solo cuando los datos están disponibles y evitar el bloqueo. Deje que una biblioteca resuelva esto, retorcido es una elección obvia. – therealtypon

+4

Si encuentra otra respuesta, como http://stackoverflow.com/questions/4585692/python-nonblocking-subprocess-check-stdout/4585898#4585898, enlace a él en lugar de duplicar la respuesta en comentario a su propia pregunta. – phooji

+0

Perdón por eso. Pensé que el punto en el comentario era la esencia destilada de stackoverflow.com/questions/4585692/... Lo tendré en cuenta la próxima vez – therealtypon

Respuesta

7

Simplemente no envían la salida a un tubo:

proc = subprocess.Popen (command_args, shell=False) 
proc.communicate() 
+2

Esto no funciona: comunicar devoluciones (Ninguno, Ninguno) – josh

+2

@josh: Sí , eso es lo esperado, y la razón por la cual el código no almacena el resultado en una variable. Como no enviamos la salida a una tubería, el subproceso heredará la salida estándar del proceso actual, lo que significa que todo se imprimirá directamente en la terminal. –

+0

Disculpe, tiene razón, no leí la pregunta con cuidado, asumí que quería hacer lo que quiero hacer, que es obtener ambos ... salida en tiempo real a stdout, y luego capturar la salida luego – josh

Cuestiones relacionadas