2012-07-30 15 views
6

En las ventanas, estoy ejecutando un script de murciélago que actualmente termina con una 'pausa' y solicita al usuario que 'Pulse cualquier tecla para continuar ...'Desactivar 'pausa' en las ventanas de escritura de murciélago

soy no se puede editar el archivo en este escenario y necesito que el script termine en lugar de colgar esperando una entrada que nunca llegará. ¿Hay alguna forma de que pueda ejecutar esto que deshabilitará o evitará el aviso?

He intentado conectar la entrada y no parece ser de ayuda. Esta secuencia de comandos se está ejecutando desde python a través del subproceso.Popen.

+0

creo que 'pause' es un comando que se construye en la' intérprete cmd' , por lo que será imposible reemplazarlo. De lo contrario, podría simplemente crear un 'pause.exe' y colocarlo al principio de la ruta. –

+0

No entiendo por qué no funciona la canalización de la entrada, puede redirigir desde la línea de comandos: 'pausa

Respuesta

11

intenta ejecutar cmd.exe /c YourCmdFile < nul

YourCmdFile - ruta completa a la secuencia de comandos por lotes

+1

+1, pero no hay necesidad de cmd.exe. Simplemente ejecute el script directamente: 'script.bat dbenham

+0

Recomiendo 'cmd/c' debido a "Este script se está ejecutando desde python a través de subprocess.Popen". No estoy seguro de cómo Python ejecuta los scripts. – Maximus

4

Éste resultó ser un poco de dolor. La redirección de nul de Maximus funcionó muy bien, ¡gracias!

En cuanto a conseguir que funcione en python, se redujo a lo siguiente. Empecé con:

BINARY = "C:/Program Files/foo/bar.exe" 
subprocess.call([BINARY]) 

intentado añadir la redirección pero subprocess.call escapa todo demasiado bien y nos suelta la redirección.

subprocess.call([BINARY + " < nul"]) 
subprocess.call([BINARY, " < nul"]) 
subprocess.call([BINARY, "<", "nul"]) 

Usando la cáscara = verdad no funcionó debido a que el espacio en binario hizo asfixiar a tratar de encontrar el ejecutable.

subprocess.call([BINARY + " < nul"], shell=True) 

Al final, tuve que recurrir a os.system y escapar de mí mismo para obtener la redirección.

os.system(quote(BINARY) + " < nul") 

No es ideal, pero hace bien el trabajo.

Si alguien sabe cómo hacer que el último ejemplo de subproceso trabaje con el espacio en el binario, sería muy apreciado.

2
subprocess.call("mybat.bat", stdin=subprocess.DEVNULL) 

lo llamaría mybat.bat y redirigir la entrada de nul en las ventanas (que desactiva la pausa como se muestra en otras respuestas)

+1

Tenga en cuenta que solo funciona en Python 3. En Python 2.x tiene que obtener un identificador de archivo para devnull (por ejemplo, 'devnull = open (os.devnull, 'r')') y pasarlo como stdin en su lugar. –

+0

@BrentNash buena captura. Terminé usando el tuyo para compatibilidad con Python2/3. Asegúrese de cerrar el archivo después de que haya terminado para evitar pérdidas de recursos (que Python 3 genera una advertencia en este caso). –

Cuestiones relacionadas