2011-06-17 8 views
7

Duplicar posible:
Running a process in pythonw with Popen without a console
How do I eliminate Windows consoles from spawned processes in Python (2.7)?La ejecución de subproceso de Python sin abrir comandos de Windows

Tengo un programa en Python que llama a un programa de procesamiento de datos numéricos separado (escrito en C) como un subproceso varias veces (usando subprocess.check_call). Funciona muy bien en Linux, y funciona muy bien en Windows, excepto por una pequeña cosa: cada vez que se llama al subproceso, se crea una ventana del símbolo del sistema y luego se destruye cuando el subproceso finaliza.

Esto no afecta el cálculo en absoluto, pero es muy molesto porque esta ventana sigue parpadeando dentro y fuera de la pantalla, y hace que sea difícil hacer otras cosas en la computadora porque la nueva ventana de símbolo del sistema puede robar el teclado atención.

¿Cómo puedo simplemente ejecutar el subproceso (que no tiene GUI) y evitar que se cree la ventana del símbolo del sistema?

+1

¿Está utilizando la cáscara = True cuando se llama 'subprocess.check_call'? Si es así, trate de no usarlo y vea si el comportamiento no cambió. – mouad

+0

Consulte http://stackoverflow.com/questions/1016384/cross-platform-subprocess-with-hidden-window – JacquesB

Respuesta

0

¿Cómo llamas a subprocess.check_call()? Si pasa shell=True, entonces no se debe crear la ventana, ya que esto hará que se establezca el indicador SW_HIDE para el atributo STARTUPINFO.wShowWindow.

Ejemplo:

subprocess.check_call(["ping", "google.com"], shell=True) 
+0

Esto también es un poco molesto porque no solo funciona; ahora tiene un error porque no le gusta cuando le doy una ruta relativa, y si le doy una ruta absoluta tampoco me gusta porque tiene espacios en ella ... –

+0

Terminé simplemente pasando un STARTUPINFO manualmente. Trabajado como un encanto. –

+6

No promocione 'shell = True' como la solución solo porque oculta la consola. Ver mi respuesta [aquí] (http://stackoverflow.com/a/12964900/95735). –

2

Al compilar la aplicación C, establezca su tipo en el subsistema Win32 en lugar del subsistema de la consola. Si se trata de una aplicación preconstruida, puede cambiar el subsistema con this tool.

+0

¿Cómo hago esto en Visual C++ 2010 Express? –

+0

Bien, encontré eso entre las opciones del enlazador, pero ahora dice que necesito definir alguna función llamada _WinMain –

+0

. Necesita cambiar el nombre de 'main()' a 'WinMain()'. Firma de la función: http://msdn.microsoft.com/en-us/library/ff381406%28v=vs.85%29.aspx –

Cuestiones relacionadas