2009-05-28 19 views
7

Estoy tratando de escribir un programa en Python y me dicen que ejecute un archivo .exe. Cuando se ejecuta este archivo .exe, se escuchan muchos datos y necesito que se imprima cierta línea en la pantalla. Estoy bastante seguro de que necesito usar subprocess.popen o algo similar, pero soy nuevo en el subproceso y no tengo ni idea. ¿Alguien tiene una manera fácil para mí de hacer esto? ¡¡Gracias!!¿Cómo puedo capturar la salida stdout de un proceso hijo?

Respuesta

17

Algo como esto:

import subprocess 
process = subprocess.Popen(["yourcommand"], stdout=subprocess.PIPE) 
result = process.communicate()[0] 
+0

¿Cómo leería una línea determinada? ¿Es ahí donde está el 0? Y sí, estoy interesado en imprimir la salida después de que el proceso haya finalizado. También donde tiene "su comando", ¿la extensión exe va allí? – Tyler

+1

"resultado" será la salida completa de "yourcommand". A continuación, puede procesar esa cadena (u objeto de bytes, en Py3.0) para encontrar la línea que está buscando. –

+3

el [0] significa el primer elemento de la tupla devuelta (stdout, stderr); puede procesar el resultado, que será una cadena, a su gusto, p. para encontrar una línea particular "yourcommand" es su comando completo, eventualmente una ruta completa a un comando si el comando no está * en la ruta * (al menos en * nix). – miku

23

@ solución de Paolo es perfecto si usted está interesado en la impresión de salida después de que el proceso ha terminado de ejecutarse. En caso de que desee emitir resultados mientras el proceso se está ejecutando, debe hacerlo de esta manera:

process = subprocess.Popen(cmd, stdout=subprocess.PIPE) 

while True: 
    out = process.stdout.readline(1) 
    if out == '' and process.poll() != None: 
     break 
    if out.startswith('myline'): 
     sys.stdout.write(out) 
     sys.stdout.flush() 
Cuestiones relacionadas