Maneira correta de pausar o programa Python

161

Eu tenho usado a inputfunção como uma maneira de pausar meus scripts

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

existe uma maneira formal de fazer isso?

RandomPhobia
fonte
2
Trabalhar em um depurador e usar pontos de interrupção?
Gddc 19/07/12

Respostas:

219

Parece bom para mim (ou raw_input()no Python 2.X). Como alternativa, você pode usar time.sleep()se quiser pausar por um determinado número de segundos.

import time
print("something")
time.sleep(5.5)    # pause 5.5 seconds
print("something")
mhawke
fonte
1
Eu sei sobre a função de suspensão no módulo de tempo, mas e se eu tiver um longo bloco de texto que desejo que o usuário leia?
RandomPhobia
7
Basta usar printpara exibir o longo bloco de texto e, em seguida, input()ou raw_input('Press <ENTER> to continue')conforme apropriado para sua versão do Python.
Mhawke
8
Para um longo bloco de texto, é melhor usar input()(ou raw_input()no Python 2.x) para solicitar ao usuário, em vez de um atraso de tempo. Leitores rápidos não querem esperar um atraso, leitores lentos podem querer mais tempo com atraso, alguém pode ser interrompido durante a leitura e querer muito mais tempo etc. Além disso, se alguém usar muito o programa, ele / ela pode se acostumar com o modo como funciona e nem precisa ler o texto longo. É mais fácil deixar o usuário controlar por quanto tempo o bloco de texto é exibido para leitura.
Steveha 19/07
30

Para janelas, use apenas :

import os
os.system("pause")
Chan Tzish
fonte
23
Isso é específico do Windows, enquanto todas as respostas existentes são independentes da plataforma.
Lvc2 /
17

Então, achei que isso funcionou muito bem em meus esforços de codificação. Eu simplesmente criei uma função no início do meu programa,

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

e agora posso usar a pause()função sempre que precisar, como se estivesse escrevendo um arquivo em lotes. Por exemplo , em um 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()

Agora, obviamente, este programa não tem objetivo e é apenas para fins de exemplo, mas você pode entender exatamente o que quero dizer.

NOTA: Para Python 3, você precisará usar, inputem vez deraw_input

Cether
fonte
7

Eu tive uma pergunta semelhante e estava usando sinal:

import signal

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

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

Então você registra um manipulador para o sinal SIGINT e faz uma pausa esperando por qualquer sinal. Agora, de fora do seu programa (por exemplo, no bash), você pode executar kill -2 <python_pid>, o que enviará o sinal 2 (ou seja, SIGINT) para o seu programa python. Seu programa chamará seu manipulador registrado e continuará em execução.

olean
fonte
2
Observe que isso não é portátil em várias plataformas, por exemplo. no Windows não há signal.pause.
Kyrill
7

Eu uso o seguinte para python2 e 3 para pausar a execução do código até o usuário pressionarENTER

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

Conforme apontado pelos comentários de mhawke e steveha , a melhor resposta para essa pergunta exata seria:

Para um longo bloco de texto, é melhor usar input('Press <ENTER> to continue')(ou raw_input('Press <ENTER> to continue')no Python 2.x) para solicitar ao usuário, em vez de um atraso de tempo. Leitores rápidos não querem esperar um atraso, leitores lentos podem querer mais tempo com atraso, alguém pode ser interrompido durante a leitura e querer muito mais tempo etc. Além disso, se alguém usar muito o programa, ele / ela pode se acostumar com o modo como funciona e nem precisa ler o texto longo. É mais fácil deixar o usuário controlar por quanto tempo o bloco de texto é exibido para leitura.

ntg
fonte
5

Muito simples:

raw_input("Press Enter to continue ...")
exit()
BuSaeed
fonte
Eu usei esse método um pouco, mas também gosto de usá-lo como uma função pause () e acho que não há necessidade de exit (). def pause (): retorna raw_input ("Pressione Enter para continuar ...")
jacktrader
NameError: name 'raw_input' is not defined
bers
5
Print ("This is how you pause")

input()
1byanymeans
fonte
0

Eu acho que a melhor maneira de parar a execução é a função time.sleep (). se você precisar suspender a execução apenas em certos casos, poderá simplesmente implementar uma instrução if como esta:

if somethinghappen:
    time.sleep(seconds)

você pode deixar o ramo else vazio.

mbiella
fonte
0

Eu acho que gosto deste soln.

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

Ele oculta o que o usuário digita, o que ajuda a esclarecer que a entrada não é usada aqui.

Mas esteja atento à plataforma OSX, pois exibe uma chave que pode ser confusa.

Mostra uma chave, como eu disse


Provavelmente, a melhor solução seria fazer algo semelhante ao módulo getpass, sem fazer uma read -sligação. Talvez fazer com que a cor fg corresponda à bg?

Samy Bencherif
fonte
0

Por esse método, você pode retomar seu programa pressionando qualquer tecla especificada que você especificou:

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

mesmo método, mas de outra maneira:

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

Nota: você pode instalar o keyboardmódulo simplesmente escrevendo isso em seu shell ou cmd:

pip install keyboard
Neotod
fonte
0
import os, sys

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

Para compatibilidade cruzada com Python 2/3, você pode usar inputatravés da sixbiblioteca:

import six
six.moves.input( 'Press the <ENTER> key to continue...' )
BuvinJ
fonte