Chcę, aby mój skrypt czekał, aż użytkownik naciśnie dowolny klawisz.
Jak mogę to zrobić?
python
wait
keyboard-input
Janusz
źródło
źródło
input
nie kontynuuje się po naciśnięciu dowolnego klawisza, tylko po naciśnięciu klawisza enter.Jednym ze sposobów na zrobienie tego w Pythonie 2 jest użycie
raw_input()
:W python3 jest po prostu
input()
źródło
enter
?input()
.from six.moves import input; input("Press Enter to continue...")
W moim systemie Linux używam następującego kodu. Jest to podobne do kodu, który widziałem gdzie indziej (na przykład w starych pytaniach do Pythona), ale kod ten obraca się w ciasnej pętli, w której ten kod nie działa i jest wiele dziwnych przypadków narożnych, których kod nie uwzględnia tego kod robi.
źródło
Jeśli nie masz nic przeciwko w zależności od poleceń systemowych, możesz użyć następujących opcji:
Linux:
Windows:
źródło
system
a następnie zadzwonićsys.exit(0)
.Po prostu używa
spowoduje błąd SyntaxError: oczekiwany EOF podczas analizowania.
Proste zastosowanie poprawki:
źródło
input
w Pythonie 2 - poprawna funkcja toraw_input
. W python 2input
jest równoważne zeval(raw_input())
.Pyton instrukcja przewiduje, co następuje:
które można umieścić w walizce.
źródło
Cross Platform, kod Python 2/3:
Usunąłem fctl / nie blokujące rzeczy, ponieważ dawały
IOError
s i nie potrzebowałem tego. Używam tego kodu, ponieważ chcę go zablokować. ;)Uzupełnienie:
Zaimplementowałem to w pakiecie na PyPI z wieloma innymi dodatkami zwanymi konsolami :
źródło
Nie znam metody niezależnej od platformy, ale w systemie Windows, jeśli używasz modułu msvcrt, możesz użyć jego funkcji getch:
mscvcrt zawiera również nieblokującą funkcję kbhit (), aby sprawdzić, czy klawisz został naciśnięty bez czekania (nie jestem pewien, czy istnieje odpowiednia funkcja curses). W systemie UNIX istnieje pakiet curses, ale nie jestem pewien, czy można go użyć bez użycia go dla wszystkich danych wyjściowych ekranu. Ten kod działa w systemie UNIX:
Zauważ, że curses.getch () zwraca numer porządkowy wciśniętego klawisza, aby uzyskać taki sam wynik, jaki musiałem rzucić.
źródło
Jeśli chcesz poczekać na wejście (aby użytkownik pukający w klawiaturę nie spowodował, że wydarzy się coś nieoczekiwanego) użyj
źródło
Jestem nowy w Pythonie i już myślałem, że jestem zbyt głupi, aby odtworzyć najprostsze sugestie tutaj przedstawione. Okazuje się, że istnieje pułapka, o której należy wiedzieć:
Kiedy skrypt Pythona jest wykonywany z IDLE, niektóre polecenia IO wydają się zachowywać zupełnie inaczej (ponieważ tak naprawdę nie ma okna terminala).
Na przykład. msvcrt.getch nie blokuje i zawsze zwraca $ ff. Zostało to już zgłoszone dawno temu (patrz np. Https://bugs.python.org/issue9290 ) - i jest oznaczone jako naprawione, jakoś problem wydaje się utrzymywać w aktualnych wersjach python / IDLE.
Więc jeśli którykolwiek z powyższych kodów nie działa, spróbuj uruchomić skrypt ręcznie, a NIE z IDLE .
źródło
Jeśli chcesz sprawdzić, czy nacisnęli dokładnie klawisz (np. Powiedz „b”) Zrób to:
źródło
os.system wydaje się zawsze wywoływać sh, co nie rozpoznaje opcji s i n dla odczytu. Jednak polecenie odczytu można przekazać do bash:
źródło