Python: ¿Redirigir la salida a varias consolas?

Tengo un programa principal, en el que un usuario puede llamar a un subproceso (para descargar archivos) varias veces. Cada vez, llamo a aria2c usando el subproceso, e imprimirá el progreso en la entrada estándar. Por supuesto, es deseable que el usuario pueda ver el progreso de cada descarga por separado.

Entonces, la pregunta es ¿cómo puedo redirigir la salida de cada proceso a una ventana de consola separada?

preguntado el 24 de diciembre de 12 a las 15:12

1 Respuestas

Estoy un poco confundido. El uso de subprocess.Popen (...) debería generar un nuevo símbolo del sistema automáticamente para cada llamada. ¿Qué es aria2c? ¿Es un programa que también habías escrito en python? ¿Es un exe de terceros que escribe en la ventana del símbolo del sistema?

Puedo ayudarlo a redirigir todos los resultados de los subprocesos al símbolo del sistema principal, para que pueda mostrarse en línea.

Además, tal vez pueda dar un poco más de detalles sobre lo que está sucediendo primero, para que pueda entender un poco mejor su problema.

Respondido el 24 de diciembre de 12 a las 17:12

Aria2c es un programa de terceros. Es extraño que solo un símbolo del sistema esté abierto a pesar de que subprocess.Popen se llama varias veces. El comando exacto que estoy usando es "Popen(command, shell=True)". Y también, ¿permitirá esto que se ejecuten varios procesos al mismo tiempo (sin esperar a que finalice el comando anterior)? - user1865009

Cuando usa subprocess.Popen, puede ejecutar varios procesos al mismo tiempo. Usé esta es una simulación de Cadena de Markov, donde ejecuté varias cadenas al mismo tiempo (para ahorrar tiempo). Originalmente, mi secuencia de comandos abría 5 ventanas de símbolo del sistema diferentes y mostraba el resultado, pero decidí que era mejor redirigir el resultado a la ventana principal, donde podía mostrar el progreso de cada uno en línea. Cuando el proceso terminó y se cerró, lo manejaría a la salida predeterminada como "Terminado". Además, ¿estás ejecutando esto en Linux o Windows? - Ryan G

Una cosa más, es que la biblioteca de subprocesos puede tener un poco de errores, por lo que es posible que deba crear clases con subprocesos y generar nuevos subprocesos para ejecutar Aria2c. Esto podría ser mucho más lento (dependiendo de cómo se maneje aria2c. Puedo sugerir crear un submódulo en python que simplemente llame al programa a través de os.system(...), y su secuencia de comandos principal puede llamar a un subproceso.Popen() en este submódulo con sys.argv dados para usar en la llamada al sistema. Pero si ejecuta este programa a través de python en un solo caso usando solo os.system (...), ¿aparece una ventana emergente y se muestra la salida? - Ryan G

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.