Prawidłowy sposób na wstrzymanie programu w Pythonie


161

Używałem tej inputfunkcji jako sposobu na wstrzymanie moich skryptów

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

czy istnieje formalny sposób, aby to zrobić?


2
Pracujesz w debugerze i używasz punktów przerwania?
gddc,

Odpowiedzi:


219

Wydaje mi się w porządku (lub raw_input()w Pythonie 2.X). Alternatywnie możesz użyć, time.sleep()jeśli chcesz wstrzymać na określoną liczbę sekund.

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

1
Wiem o funkcji uśpienia w module czasu, ale co, jeśli mam długi blok tekstu, który chcę, aby użytkownik przeczytał?
RandomPhobia

7
Po prostu użyj, printaby wyświetlić długi blok tekstu, a następnie input()lub raw_input('Press <ENTER> to continue')odpowiednio dla twojej wersji Pythona.
mhawke

8
W przypadku długich bloków tekstu najlepiej jest używać input()(lub raw_input()w Pythonie 2.x) do monitowania użytkownika, a nie opóźnienia czasowego. Szybcy czytelnicy nie będą chcieli czekać na opóźnienie, powolni czytelnicy mogą chcieć więcej czasu na opóźnienie, ktoś może zostać przerwany w czytaniu i będzie potrzebował dużo więcej czasu itp. Ponadto, jeśli ktoś często używa programu, on / może przyzwyczaić się do tego, jak to działa i nie będzie musiała nawet czytać długiego tekstu. Po prostu łatwiej jest pozwolić użytkownikowi kontrolować, jak długo blok tekstu jest wyświetlany do czytania.
steveha

30

Tylko w systemie Windows użyj:

import os
os.system("pause")

23
Jest to specyficzne dla systemu Windows, podczas gdy wszystkie istniejące odpowiedzi są niezależne od platformy.
lvc


17

Tak więc okazało się, że działa to bardzo dobrze w moich próbach kodowania. Po prostu utworzyłem funkcję na samym początku programu,

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

a teraz mogę korzystać z tej pause()funkcji zawsze, gdy potrzebuję, tak jakbym pisał plik wsadowy. Na przykład w programie takim jak ten:

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

Oczywiście ten program nie ma celu i służy tylko jako przykład do celów, ale możesz dokładnie zrozumieć, o co mi chodzi.

UWAGA: W przypadku Pythona 3 będziesz musiał użyć, inputa nieraw_input


7

Miałem podobne pytanie i korzystałem z sygnału:

import signal

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

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

Więc rejestrujesz program obsługi dla sygnału SIGINT i czekasz na dowolny sygnał. Teraz spoza twojego programu (np. W bash) możesz uruchomić kill -2 <python_pid>, który wyśle ​​sygnał 2 (tj. SIGINT) do twojego programu w Pythonie. Twój program zadzwoni do zarejestrowanego programu obsługi i zacznie działać.


2
Należy pamiętać, że nie można tego przenosić między platformami, np. w systemie Windows nie ma signal.pause.
kyrill

7

Używam następujących dla python2 i 3, aby wstrzymać wykonywanie kodu do momentu naciśnięcia przez użytkownikaENTER

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

5

Jak podkreślają komentarze mhawke i steveha , najlepszą odpowiedzią na to dokładne pytanie byłoby:

W przypadku długich bloków tekstu najlepiej jest używać input('Press <ENTER> to continue')(lub raw_input('Press <ENTER> to continue')w Pythonie 2.x) do monitowania użytkownika, a nie opóźnienia czasowego. Szybcy czytelnicy nie będą chcieli czekać na opóźnienie, powolni czytelnicy mogą chcieć więcej czasu na opóźnienie, ktoś może zostać przerwany w czytaniu i będzie potrzebował dużo więcej czasu itp. Ponadto, jeśli ktoś często używa programu, on / może przyzwyczaić się do tego, jak to działa i nie będzie musiała nawet czytać długiego tekstu. Po prostu łatwiej jest pozwolić użytkownikowi kontrolować, jak długo blok tekstu jest wyświetlany do czytania.


5

Bardzo prosty:

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

Trochę używałem tej metody, ale lubię też używać jej jako funkcji pause () i nie sądzę, by potrzebna była metoda exit (). def pause (): return raw_input ("Naciśnij Enter, aby kontynuować ...")
jacktrader

NameError: name 'raw_input' is not defined
bers


0

Myślę, że najlepszym sposobem na zatrzymanie wykonywania jest funkcja time.sleep (). jeśli chcesz zawiesić wykonywanie tylko w określonych przypadkach, możesz po prostu zaimplementować instrukcję if w następujący sposób:

if somethinghappen:
    time.sleep(seconds)

możesz zostawić gałąź else pustą.


0

Myślę, że podoba mi się ten soln.

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

Ukrywa wszystko, co wpisuje użytkownik, co pomaga wyjaśnić, że dane wejściowe nie są tutaj używane.

Ale pamiętaj, że na platformie OSX wyświetla klucz, który może być mylący.

Pokazuje klucz, jak powiedziałem


Prawdopodobnie najlepszym rozwiązaniem byłoby samodzielne zrobienie czegoś podobnego do modułu getpass, bez wykonywania read -społączenia. Może dopasowanie koloru fg do bg?


0

Dzięki tej metodzie możesz wznowić program, naciskając dowolny określony klawisz, który:

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

ta sama metoda, ale w inny sposób:

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

Uwaga: możesz zainstalować keyboardmoduł po prostu pisząc to w swojej powłoce lub cmd:

pip install keyboard

0
import os, sys

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

-1

Aby uzyskać zgodność z Pythonem 2/3, możesz użyć inputza pośrednictwem sixbiblioteki:

import six
six.moves.input( 'Press the <ENTER> key to continue...' )
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.