2011-08-31 14 views
6

Estoy usando Python 2.6 en Windows 7. Tengo el archivo .cmd de Windows que invoca Python para ejecutar el servidor web CherryPy (versión 3.1.2). Comienzo este archivo .cmd ejecutándolo en el prompt en un shell de Windows CMD. Cuando CherryPy nota que uno de sus archivos dependientes ha cambiado, se reinicia. Hay un par de problemas que se presentan en esta configuración en Windows, ya que la invocación que CherryPy usa para reiniciar en sí es¿Cómo hacer os.execv() en Python en Windows sin desconectarse de la consola?

os.execv(sys.executable, args) 

pero no se puede invocar el Python ejecutable en el archivo .cmd. Me las he arreglado para eludir ese problema a través de diversos gimnasia Python, y ahora tengo que reiniciar llamando al (esencialmente)

os.execv(sys.argv[0], args) 

Pero el proceso reiniciado está separado del teclado; cogerá Ctrl-C, y luego me preguntan

Terminate batch job (Y/N)? 

pero el tipo Y o NI está atrapado no por el archivo .cmd que termina, sino por el shell de Windows CMD, y responde

'Y' is not recognized as an internal or external command, operable program or batch file. 

Entonces, ¿cómo configuro las cosas en Windows para mantener el proceso reiniciado en lo que yo llamaría "el primer plano" en Unix?

+0

Esta pregunta [link] (http: // stackoverflow .com/questions/7004687/os-exec-on-windows) es una versión más simple de esta pregunta. Una respuesta a esa pregunta contaría como una respuesta a esta, pero no ha sido respondida satisfactoriamente. –

+0

Eche un vistazo a mi nuevo comentario a esa pregunta. –

Respuesta

-3

puede utilizar el método subprocess.call como en este ejemplo

import subprocess 

retcode = subprocess.call(["ls", "-l"]) 

ver este enlace para obtener más información acerca de la clase subproceso:

subprocess — Subprocess management

+1

No, eso tiene el mismo defecto que el método original. –

Cuestiones relacionadas