Ich möchte, dass mein Skript wartet, bis der Benutzer eine beliebige Taste drückt.
Wie mache ich das?
python
wait
keyboard-input
Janusz
quelle
quelle
input
nicht fort, wenn eine Taste gedrückt wird, sondern nur, wenn die Eingabetaste gedrückt wird.Eine Möglichkeit, dies in Python 2 zu tun, besteht darin, Folgendes zu verwenden
raw_input()
:In Python3 ist es nur
input()
quelle
enter
?input()
.from six.moves import input; input("Press Enter to continue...")
Auf meiner Linux-Box verwende ich den folgenden Code. Dies ähnelt dem Code, den ich an anderer Stelle gesehen habe (zum Beispiel in den alten Python-FAQs), aber dieser Code dreht sich in einer engen Schleife, in der dieser Code dies nicht tut, und es gibt viele seltsame Eckfälle, in denen der Code dies nicht berücksichtigt Code tut.
quelle
Wenn Sie mit den Systembefehlen einverstanden sind, können Sie Folgendes verwenden:
Linux:
Windows:
quelle
system
und dann aufrufensys.exit(0)
.Einfach benutzen
verursacht einen SyntaxError: erwartete EOF beim Parsen.
Einfache Fixverwendung:
quelle
input
in Python 2 verwenden - die richtige Funktion istraw_input
. In Python 2input
ist äquivalent zueval(raw_input())
.Das Python- Handbuch enthält Folgendes:
welches in Ihren Anwendungsfall gerollt werden kann.
quelle
Plattformübergreifender Python 2/3 Code:
Ich habe das fctl / nicht blockierende Zeug entfernt, weil es
IOError
s gab und ich es nicht brauchte. Ich verwende diesen Code speziell, weil ich möchte, dass er blockiert wird. ;)Nachtrag:
Ich habe dies in einem Paket auf PyPI mit vielen anderen Extras namens Konsole implementiert :
quelle
Ich kenne keine plattformunabhängige Methode, aber unter Windows können Sie, wenn Sie das msvcrt-Modul verwenden, dessen getch-Funktion verwenden:
mscvcrt enthält auch die nicht blockierende Funktion kbhit (), um festzustellen, ob eine Taste gedrückt wurde, ohne zu warten (nicht sicher, ob es eine entsprechende Fluchfunktion gibt). Unter UNIX gibt es das Curses-Paket, aber Sie sind sich nicht sicher, ob Sie es verwenden können, ohne es für die gesamte Bildschirmausgabe zu verwenden. Dieser Code funktioniert unter UNIX:
Beachten Sie, dass curses.getch () die Ordnungszahl der gedrückten Taste zurückgibt, damit sie dieselbe Ausgabe hat, die ich zum Umwandeln hatte.
quelle
Wenn Sie auf die Eingabe warten möchten (damit der Benutzer, der auf die Tastatur klopft, nicht dazu führt, dass etwas Unbestimmtes passiert), verwenden Sie
quelle
Ich bin neu in Python und dachte bereits, ich sei zu dumm, um die einfachsten Vorschläge zu reproduzieren, die hier gemacht wurden. Es stellt sich heraus, dass es eine Falle gibt, die man kennen sollte:
Wenn ein Python-Skript von IDLE ausgeführt wird, scheinen sich einige E / A-Befehle völlig anders zu verhalten (da es tatsächlich kein Terminalfenster gibt).
Z.B. msvcrt.getch ist nicht blockierend und gibt immer $ ff zurück. Dies wurde bereits vor langer Zeit gemeldet (siehe z. B. https://bugs.python.org/issue9290 ) - und es wurde als behoben markiert. Irgendwie scheint das Problem in aktuellen Versionen von Python / IDLE weiterhin zu bestehen.
Wenn einer der oben genannten Codes für Sie nicht funktioniert, führen Sie das Skript manuell und NICHT über IDLE aus .
quelle
Wenn Sie sehen möchten, ob sie eine genaue Taste gedrückt haben (z. B. 'b'), gehen Sie folgendermaßen vor:
quelle
os.system scheint immer sh aufzurufen, das die Optionen s und n zum Lesen nicht erkennt. Der Lesebefehl kann jedoch an bash übergeben werden:
quelle