[Zusatz] tty version
Wenn Sie normalerweise input () oder sys.stdin.read () verwenden,
Geben Sie Zeichen ein
Drücken Sie die Eingabetaste
Es sind zwei Schritte erforderlich.
Ich möchte, dass Sie etwas tun, sobald Sie die Taste drücken, ohne die Eingabetaste zu drücken. Ich habe versucht, es zu finden, aber ich konnte es nicht finden, also habe ich mir eine Notiz gemacht.
Sie können den Vorgang auf Mac und Ubuntu überprüfen. Es funktioniert nicht in Windows, aber es scheint einfach, dasselbe mit dem msvcrt-Modul zu tun.
import sys
import termios
#Holen Sie sich den Standard-Deskriptor für Eingabedateien
fd = sys.stdin.fileno()
#Holen Sie sich die Terminal-Attribute von fd
#Das Gleiche wird in alt und neu eingegeben.
#Nehmen Sie Änderungen an neu vor und passen Sie sie an
#alt soll später restauriert werden
old = termios.tcgetattr(fd)
new = termios.tcgetattr(fd)
#new[3]Ist lflags
#ICANON(Kanonischer Modus Flag)Entfernen
new[3] &= ~termios.ICANON
#ECHO(Flag zur Anzeige der eingegebenen Zeichen)Entfernen
new[3] &= ~termios.ECHO
try:
#Wenden Sie das neu geschriebene neu auf fd an
termios.tcsetattr(fd, termios.TCSANOW, new)
#Empfangen Sie Eingaben von der Tastatur.
#Da lfalgs neu geschrieben wurde, können Sie mit dem nächsten fortfahren, ohne die Eingabetaste zu drücken. Echo nicht
ch = sys.stdin.read(1)
finally:
#Stellen Sie die Attribute von fd wieder her
#Insbesondere werden ICANON und ECHO wiederhergestellt
termios.tcsetattr(fd, termios.TCSANOW, old)
print(ch)
Zunächst werden Eingabe und Ausgabe mithilfe eines Bezeichners verwaltet, der als Dateideskriptor bezeichnet wird. http://qiita.com/toshihirock/items/78286fccf07dbe6df38f
Durch den Austausch des Dateideskriptors zwischen dem Betriebssystem und jedem Programm kann gegenseitig beurteilt werden, ob es sich um eine Standardeingabe / -ausgabe, eine Fehlerausgabe oder eine Eingabe / Ausgabe aus einer Datei handelt.
termios Termios ist die Kontaktstelle für den tatsächlichen Datenaustausch mit dem Betriebssystem mithilfe des Dateideskriptors. termios bietet Informationen zum Datenaustausch zwischen dem Programm und dem Betriebssystem. https://linuxjm.osdn.jp/html/LDP_man-pages/man3/termios.3.html
Unter den Informationen befindet sich auch ein Flag (kanonischer Modus, ICANON), das entscheidet, ob auf die Eingabe gewartet werden soll, bis die Eingabe gedrückt wird, oder ob die Eingabe erfolgt, sobald die Taste gedrückt wird. Es ist eine Dimension, bei der Tasteneingaben durch Spielen erkannt werden können.
Übrigens wird im obigen Beispiel auch das Flag (ECHO) manipuliert, das entscheidet, ob die eingegebenen Zeichen angezeigt werden sollen.
Über Termios. Ich kenne auch den kanonischen Modus. https://linuxjm.osdn.jp/html/LDP_man-pages/man3/termios.3.html
Termios in Python http://docs.python.jp/2/library/termios.html#module-termios
Sie können etwas Ähnliches auf einer höheren Ebene tun als Termios namens tty. Oder besser gesagt, dieser ist einfacher. Nur unter Unix verfügbar. http://docs.python.jp/2/library/tty.html#module-tty
Ich benutze tty, um ein schönes Modul zu erstellen http://code.activestate.com/recipes/134892/
Recommended Posts