Forma correcta de pausar el programa Python


161

He estado usando la inputfunción como una forma de pausar mis scripts

print("something")
wait = input("PRESS ENTER TO CONTINUE.")
print("something")

¿Hay alguna forma formal de hacer esto?


2
¿Trabaja en un depurador y usa puntos de interrupción?
gddc

Respuestas:


219

Me parece bien (o raw_input()en Python 2.X). Alternativamente, podría usarlo time.sleep()si desea hacer una pausa durante un cierto número de segundos.

import time
print("something")
time.sleep(5.5)    # pause 5.5 seconds
print("something")

1
Sé acerca de la función de suspensión en el módulo de tiempo, pero ¿qué sucede si tengo un bloque de texto largo que quiero que lea el usuario?
RandomPhobia

77
Simplemente use printpara mostrar el bloque de texto largo y luego input()o raw_input('Press <ENTER> to continue')según corresponda para su versión de Python.
mhawke

8
Para un bloque de texto largo, es mejor usar input()(o raw_input()en Python 2.x) para solicitar al usuario, en lugar de un retraso de tiempo. Los lectores rápidos no querrán esperar un retraso, los lectores lentos pueden querer más tiempo en el retraso, alguien puede ser interrumpido mientras lo lee y desea mucho más tiempo, etc. Además, si alguien usa mucho el programa, él / ella ella puede acostumbrarse a cómo funciona y no necesitar siquiera leer el texto extenso. Es más amigable dejar que el usuario controle cuánto tiempo se muestra el bloque de texto para leer.
steveha

30

Para ventanas solo use:

import os
os.system("pause")

23
Esto es específico de Windows, mientras que todas las respuestas existentes son independientes de la plataforma.
lvc


17

Entonces, encontré que esto funciona muy bien en mis esfuerzos de codificación. Simplemente creé una función al comienzo de mi programa,

def pause():
    programPause = raw_input("Press the <ENTER> key to continue...")

y ahora puedo usar la pause()función siempre que lo necesito, como si estuviera escribiendo un archivo por lotes. Por ejemplo , en un programa como este:

import os
import system

def pause():
    programPause = raw_input("Press the <ENTER> key to continue...")

print("Think about what you ate for dinner last night...")
pause()

Ahora, obviamente, este programa no tiene ningún objetivo y es solo para fines de ejemplo, pero puedes entender exactamente lo que quiero decir.

NOTA: Para Python 3, deberá usar inputen lugar deraw_input


7

He tenido una pregunta similar y estaba usando la señal:

import signal

def signal_handler(signal_number, frame):
    print "Proceed ..."

signal.signal(signal.SIGINT, signal_handler)
signal.pause()

Entonces registra un controlador para la señal SIGINT y hace una pausa esperando cualquier señal. Ahora desde fuera de su programa (por ejemplo, en bash), puede ejecutar kill -2 <python_pid>, lo que enviará la señal 2 (es decir, SIGINT) a su programa de Python. Su programa llamará a su controlador registrado y continuará ejecutándose.


2
Tenga en cuenta que esto no es portátil en todas las plataformas, por ejemplo. en Windows no hay es signal.pause.
kyrill

7

Uso lo siguiente para python2 y 3 para pausar la ejecución del código hasta que el usuario presionaENTER

import six
if six.PY2:
    raw_input("Press the <ENTER> key to continue...")
else:
    input("Press the <ENTER> key to continue...")

5

Como señalaron los comentarios de mhawke y steveha , la mejor respuesta a esta pregunta exacta sería:

Para un bloque de texto largo, es mejor usar input('Press <ENTER> to continue')(o raw_input('Press <ENTER> to continue')en Python 2.x) para solicitar al usuario, en lugar de un retraso de tiempo. Los lectores rápidos no querrán esperar un retraso, los lectores lentos pueden querer más tiempo en el retraso, alguien puede ser interrumpido mientras lo lee y desea mucho más tiempo, etc. Además, si alguien usa mucho el programa, él / ella ella puede acostumbrarse a cómo funciona y no necesitar siquiera leer el texto extenso. Es más amigable dejar que el usuario controle cuánto tiempo se muestra el bloque de texto para leer.


5

Muy simple:

raw_input("Press Enter to continue ...")
exit()

He usado este método un poco, sin embargo, también me gusta usarlo como una función pause () y no creo que sea necesario salir (). def pause (): return raw_input ("Presione Enter para continuar ...")
jacktrader

NameError: name 'raw_input' is not defined
Bers


0

Creo que la mejor manera de detener la ejecución es la función time.sleep (). si necesita suspender la ejecución solo en ciertos casos, simplemente puede implementar una declaración if como esta:

if somethinghappen:
    time.sleep(seconds)

puedes dejar la rama else vacía.


0

Creo que me gusta esta solución.

import getpass
getpass.getpass("Press Enter to Continue")

Oculta lo que escriba el usuario, lo que ayuda a aclarar que la entrada no se usa aquí.

Pero tenga en cuenta que en la plataforma OSX muestra una clave que puede ser confusa.

Muestra una llave, como dije


Probablemente la mejor solución sería hacer algo similar al módulo getpass usted mismo, sin hacer una read -sllamada. ¿Quizás hacer que el color fg coincida con el bg?


0

Con este método, puede reanudar su programa simplemente presionando cualquier tecla especificada que haya especificado que:

import keyboard
while True:
    key = keyboard.read_key()
    if key == 'space':  # you can put any key you like instead of 'space'
        break

mismo método pero de otra manera:

import keyboard
while True:
    if keyboard.is_pressed('space'):  # same, you can put any key you like instead of 'space'
        break

Nota: puede instalar el keyboardmódulo simplemente escribiendo esto en su shell o cmd:

pip install keyboard

0
import os, sys

if sys.platform == 'win32':
    os.system('pause')
else:
    input('Press any key to continue...')

-1

Para compatibilidad cruzada con Python 2/3, puede usar a inputtravés de la sixbiblioteca

import six
six.moves.input( 'Press the <ENTER> key to continue...' )
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.