¿Cómo puedo generar nuevos shells para ejecutar scripts de Python desde un script de Python base?

He ejecutado con éxito varios scripts de Python, llamándolos desde un script base utilizando el módulo de subproceso:

subprocess.popen([sys.executable, 'script.py'], shell=True) 

Sin embargo, cada uno de estos scripts ejecuta algunas simulaciones (archivos .exe desde una aplicación C ++) que generan algunos resultados al shell. Todas estas salidas se escriben en el shell base desde donde lancé esos scripts. Me gustaría generar un nuevo shell para cada script. He intentado generar nuevos shells utilizando el atributo shell=True al llamar a subprocess.call (también se ha probado con popen), pero no funciona.

¿Cómo obtengo un nuevo shell para cada proceso generado con el subprocess.call?

Estaba leyendo la documentación sobre stdin y stdout como lo sugirió Spencer y encontré una marca para resolver el problema: subprocess.CREATE_NEW_CONSOLE. Tal vez la redirección de las tuberías haga el trabajo también, pero esta parece ser la solución más simple (al menos para este problema específico). Acabo de probarlo y funcionó perfectamente:

 subprocess.popen([sys.executable, 'script.py'], creationflags = subprocess.CREATE_NEW_CONSOLE) 

Popen ya genera un subproceso para manejar las cosas. Solo necesitas redirigir los tubos de salida. Mire la documentación del subproceso , específicamente la sección sobre popen stdin, stdout y stderr redirection.

Si no redirecciona estas canalizaciones, las hereda del padre. Solo ten cuidado de no bloquear los procesos.

Querías ventanas adicionales para cada subproceso. Esto se maneja también. Mira la sección startupinfo del subproceso. Explica qué opciones configurar en Windows para generar un nuevo terminal para cada subproceso. Tenga en cuenta que requiere el uso de la opción shell = True.

Para abrir en una consola diferente, haga (probado en Windows 7 / Python 3):

 from sys import executable from subprocess import Popen, CREATE_NEW_CONSOLE Popen([executable, 'script.py'], creationflags=CREATE_NEW_CONSOLE) input('Enter to exit from this launcher script...') 

Esto en realidad no responde a su pregunta. Pero también he tenido mis problemas con el subproceso, y pexpect resultó ser realmente útil.