Tastenanschläge in Python erkennen (ohne Eingabe)

[Zusatz] tty version

Wenn Sie normalerweise input () oder sys.stdin.read () verwenden,

  1. Geben Sie Zeichen ein

  2. 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)

Dateideskriptor

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.

Referenz

Ü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

Tastenanschläge in Python erkennen (ohne Eingabe)
Erkennen Sie Tastenanschläge in Python (tty)
Erstellen Sie Google Mail in Python ohne Verwendung der API
Quadtree in Python --2
Python in der Optimierung
CURL in Python
Metaprogrammierung mit Python
Python 3.3 mit Anaconda
Geokodierung in Python
SendKeys in Python
Metaanalyse in Python
Unittest in Python
Epoche in Python
Zwietracht in Python
Deutsch in Python
DCI in Python
Quicksort in Python
nCr in Python
Plink in Python
Konstante in Python
FizzBuzz in Python
SQLite in Python
Schritt AIC in Python
LINE-Bot [0] in Python
CSV in Python
Reverse Assembler mit Python
Reflexion in Python
Konstante in Python
nCr in Python.
Format in Python
Scons in Python 3
Puyopuyo in Python
Python in Virtualenv
PPAP in Python
Quad-Tree in Python
Reflexion in Python
Chemie mit Python
Hashbar in Python
DirectLiNGAM in Python
LiNGAM in Python
In Python reduzieren
In Python flach drücken
Erhalten Sie Tastenanschläge während der Hintergrundausführung in Python (Windows)
Erkennen Sie das Golden Cross Stock Chart mit Python
Ermöglicht die Eingabe häufig verwendeter Klammern und Gleichheiten in Python ohne Umschalttaste
Sortierte Liste in Python
Clustertext in Python
AtCoder # 2 jeden Tag mit Python
Täglicher AtCoder # 6 in Python
Täglicher AtCoder # 18 in Python
Bearbeiten Sie Schriftarten in Python
Singleton-Muster in Python
Dateioperationen in Python
Lesen Sie DXF mit Python
Täglicher AtCoder # 53 in Python
Tastenanschlag in Python
Verwenden Sie config.ini mit Python