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ć?

RandomPhobia
źródło
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")
mhawke
źródło
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")
Chan Tzish
źródło
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

Cether
źródło
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ć.

olean
źródło
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...")
Adewole Adesola
źródło
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.

ntg
źródło
5

Bardzo prosty:

raw_input("Press Enter to continue ...")
exit()
BuSaeed
źródło
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
5
Print ("This is how you pause")

input()
1byanymeans
źródło
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ą.

mbiella
źródło
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?

Samy Bencherif
źródło
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
Neotod
źródło
0
import os, sys

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