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?

RandomPhobia
fuente
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")
mhawke
fuente
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")
Chan Tzish
fuente
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

Cether
fuente
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.

olean
fuente
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...")
Adewole Adesola
fuente
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.

ntg
fuente
5

Muy simple:

raw_input("Press Enter to continue ...")
exit()
BuSaeed
fuente
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
5
Print ("This is how you pause")

input()
1por cualquier medio
fuente
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.

mbiella
fuente
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?

Samy Bencherif
fuente
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
Neotod
fuente
0
import os, sys

if sys.platform == 'win32':
    os.system('pause')
else:
    input('Press any key to continue...')
Mujeeb Ishaque
fuente
-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...' )
BuvinJ
fuente