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?
7
A
Respuesta
17
Algo como esto:
import subprocess
process = subprocess.Popen(["yourcommand"], stdout=subprocess.PIPE)
result = process.communicate()[0]
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
- 1. Redirigir la salida (stdout, stderr) de un proceso hijo a la ventana Resultados de Visual Studio
- 2. Cómo redirigir el proceso hijo stdout/stderr al proceso principal stdout/stderr en Java?
- 3. Cómo capturar stdout de otro proceso en Win32 sin latencia?
- 4. Multiprocesamiento Python: ¿Cómo puedo redireccionar FIABLY stdout de un proceso hijo?
- 5. ¿Cómo puedo capturar el stdout de un proceso que YA está en ejecución?
- 6. Cómo capturar la salida stdout/log de un agente en SLIME?
- 7. ¿Alguna solución posible para capturar la entrada/salida del proceso?
- 8. lanzando un proceso de rubí, capturar stdout, stderr, consiguiendo existen estado
- 9. Cómo capturar un STDOUT y STDERR de proceso por línea a medida que ocurren, durante la operación del proceso. (C#)
- 10. ¿Cómo puedo redireccionar la salida de la tarea ant exec tanto a un archivo como a stdout?
- 11. ¿Cómo puedo saber cuándo murió un proceso hijo?
- 12. ¿Cómo puedo capturar la salida de una carpa en Perl?
- 13. cómo salir de un proceso hijo - _exit() frente a la salida
- 14. Salida de subproceso Python a stdout
- 15. ¿Cómo finaliza Ctrl-C un proceso hijo?
- 16. Cómo capturar la salida de printf?
- 17. Cómo capturar stdout/stderr con googletest?
- 18. Capturar la salida del sistema Perl()
- 19. ¿Cómo registrar la salida stdout en Tomcat?
- 20. ¿Uso de memoria de un proceso hijo?
- 21. Cómo capturar la salida de consola de un servicio C#?
- 22. Capturar salida del proceso mediante el evento OutputDataReceived
- 23. ¿Cómo capturar la salida desde un comando remoto en Capistrano?
- 24. ¿Cómo puedo capturar la salida y mostrarla al mismo tiempo con Python?
- 25. ¿Hay alguna clase incorporada de Scala para capturar la salida de un proceso externo?
- 26. Captura de salida de proceso externo
- 27. Proceso hijo múltiple
- 28. pitón: ejecutar un proceso con tiempo de espera y la salida estándar de captura, stderr y estado de salida
- 29. ¿Cómo captura stderr, stdout y el código de salida de una sola vez en Perl?
- 30. stdout redirect cambio de salida
¿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
"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. –
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