Python llamando a progtwigs externos sin abrir la consola (dos indicaciones)

Posible duplicado:
Ejecutando un proceso en pythonw con Popen sin una consola
¿Cómo elimino las consolas de Windows de los procesos creados en Python (2.7)?

Estoy usando Python 2.7 y ejecutando los scripts de Python desde IDLE.

Los comandos que estoy ejecutando son simples ejes que realizan tareas rápidas. El problema que tengo es que cada vez que se llaman los comandos externos desde Python , se crea una consola que parpadea en mi pantalla y se enfoca, lo que me impide usar mi PC mientras ejecuto varios scripts.

Ejemplos de cómo los estoy llamando desde Python son los siguientes:

result = call(["Commands\Set.exe", str(i), ARG2]) check_output(["Commands\Read.exe", ARG2]) 

Buscando una solución que encontré agregando lo siguiente

 shell=True 

para realizar el siguiente comando

 check_output(["Commands\Read.exe", ARG2], shell=True) 

Sin embargo, todavía aparece la consola cada vez que se llama un comando externo

Puede haber dos problemas aquí. En primer lugar, si los scripts de Python tienen la extensión .pyw, se asociarán con pythonw, que no utiliza una consola *. Sin embargo, tienes shell = True, que genera una consola *. Necesitas ejecutar el progtwig y ocultar la consola:

 import subprocess proc = subprocess.Popen('hello.py', creationflags=subprocess.SW_HIDE, shell=True) proc.wait() 

* Pedantical, no es un indicador de DOS, es una ventana de consola. DOS – Sistema operativo de disco – era un sistema operativo IBM mainframe. Las características de línea de comandos de MS-DOS o PC-DOS se reflejaron (con muchas características adicionales) mediante cmd.exe (un shell de Windows), que es un progtwig de consola y, por lo tanto, utiliza una ventana de consola. Es esa ventana de consola que necesitas ocultar.

startupinfo usar el parámetro startupinfo del constructor de la clase subprocess.Popen() .

 startupinfo = subprocess.STARTUPINFO() startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW startupinfo.wShowWindow = subprocess.SW_HIDE subprocess.Popen(command, startupinfo=startupinfo) 

No necesita shell=True si todo lo que desea es ocultar la ventana de la consola; ver esta respuesta