2009-02-23 24 views
45

Estoy ejecutando scripts de Python en la línea de comandos desde la barra de tareas de Windows al tener un atajo que apunta al intérprete de Python con la secuencia de comandos real como parámetro.Pausa en Python

Después de que se ha procesado la secuencia de comandos, el intérprete finaliza y la ventana de salida se cierra, lo que hace imposible leer la salida de la secuencia de comandos.

¿Cuál es la forma más directa de mantener la ventana del intérprete abierta hasta que se presione cualquier tecla?

En los archivos por lotes, uno puede finalizar el script con pausa. Lo más parecido a esto que encontré en python es raw_input() que no es óptimo porque requiere presionar la tecla de retorno (en lugar de cualquier tecla).

¿Alguna idea?

Respuesta

51

Una forma es dejar un raw_input() al final, por lo que el script espera a que presione Entrar antes de que finalice.

+25

[Con Python 3+] (http://stackoverflow.com/questions/954834/easy-how-to-use-raw-input-in-3-1), esto ha cambiado a 'entrada()'. – palswim

+15

Esto no es una solución. No sé por qué el que contesta lo eligió. Las especificaciones eran "Presione cualquier tecla y no solo Enter". Esta solución funciona solo con enter. –

+3

@ Wolfpack'08 Aunque estoy de acuerdo en que esta respuesta claramente no responde a la pregunta, debe señalarse que esta es una de las prioridades de la búsqueda en google de "pausa de Python", por lo que aún es útil tener esta respuesta. – CrazyCasta

4

En Windows, puede utilizar el módulo msvcrt.

msvcrt.kbhit() Volver cierto si una pulsación de tecla está a la espera de ser leído.

msvcrt.getch() Lee una pulsación de tecla y devuelve el carácter resultante. Nada se repite a la consola. Esta llamada bloqueará si no hay una tecla presionada disponible actualmente , pero no esperará que se presione Enter .

Si quieres que funcione también en los sistemas basados ​​en Unix puede probar this solution utilizando los módulos termios y fcntl.

13

No hay necesidad de esperar a la entrada antes del cierre, basta con cambiar su comando, así:

cmd /K python <script> 

El interruptor /K ejecutará el comando que sigue, pero deje la ventana de intérprete de comandos abierta, en contraste con /C , que se ejecuta y luego se cierra.

+0

Esto no ayuda en el! caso especificado por Bernd: iniciar una secuencia de comandos desde un acceso directo de barra de tareas, a menos que el acceso directo se configure correctamente (que no es el caso predeterminado). –

+0

@bgbg: pero la idea es que el acceso directo se ha cambiado –

+0

/K requiere para terminar cmd a través de "salir" o cerrar la ventana con el mouse. Eso es un poco más que una sola pulsación de tecla :-) –

7

Una forma es dejar un raw_input() al final por lo que el script espera a que se pulse entrar antes de que termine.

La ventaja de usar raw_input() en lugar de msvcrt. * Es que el primero es parte de Python estándar (es decir, absolutamente multiplataforma). Esto también significa que la ventana de instrucciones estará vivo tras hacer doble clic en el icono de archivo de script, sin la necesidad de hacer

cmd /K python <script> 
+1

+1: muchas personas pueden encontrar la tecla "Entrar" o "Volver" sin cometer grandes errores. Exigir "cualquier clave" en lugar de regresar parece un poco tonto. –

0
import pdb 
pdb.debug() 

Esto se utiliza para depurar el guión. Debería ser útil para romper también.

32

Probar os.system("pause") - Lo usé y funcionó para mí.

Asegúrese de incluir import os en la parte superior de su script.

8

La mejor opción: os.system('pause') < - - Esto realmente mostrará un mensaje que dice "presione cualquier tecla para continuar" mientras que al agregar solo raw_input('') no se imprimirá ningún mensaje, solo el cursor estará disponible.

no relacionado con responder:

os.system("some cmd command") es realmente un gran comando como el comando se puede ejecutar cualquier comandos cmd/archivo por lotes.

+0

Encontré el problema de 'os.system ('pause')' como dijiste, y busqué esta pregunta. –

-1

Si escribe

input("") 

Será esperar a que se presione ningún botón después seguirá. También puedes poner texto entre las comillas.

2

Sí, sé que estoy publicando en un hilo antiguo, pero me gustaría añadir mi voto para usando la entrada() (3.xy superior).

Agregado al final de mi script .py, de hecho evita que la ventana de la consola se abra y se cierre de inmediato.

En cuanto al "problema" de qué tecla presionar para cerrarlo, yo (y 1,000 de otros, estoy seguro) simplemente utilizo la entrada ("Presione Enter para cerrar").

Gracias por dejarme añadir mis 2 centavos :)

.

+0

@ ρяσѕρєяK ¿De qué estás hablando, hombre? Él dice que hay que usar 'input', que es lo que OP estaba pidiendo. Sin embargo, necesita reescribir y deshacerse del estilo hablador. – Superbest

1

En las ventanas 10 inserto en este Beggining:

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

extraño, pero funciona para mí (Junto con la entrada() al final, por supuesto)