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?


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")

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")

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


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.


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...")

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.


5

Muito simples:

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

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


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.


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?


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

0
import os, sys

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

-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...' )
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.