Funktionstasten und Cursortasten können ebenfalls identifiziert werden. Es ist nicht möglich, die einzelne Eingabe der Umschalt- oder Steuertaste zu beurteilen, aber das gleichzeitige Drücken mit der Zeichentaste kann identifiziert werden. Wenn die termios.ISIG-Maske aktiviert ist, akzeptiert Cntl + C das Programm als Tasteneingabe, ohne anzuhalten.
Punkt
getkey.py
import fcntl
import termios
import sys
import os
def getkey():
fno = sys.stdin.fileno()
#Holen Sie sich das Terminal-Attribut von stdin
attr_old = termios.tcgetattr(fno)
#Stdin Echo deaktiviert, kanonischer Modus deaktiviert
attr = termios.tcgetattr(fno)
attr[3] = attr[3] & ~termios.ECHO & ~termios.ICANON # & ~termios.ISIG
termios.tcsetattr(fno, termios.TCSADRAIN, attr)
#Stellen Sie stdin auf NONBLOCK
fcntl_old = fcntl.fcntl(fno, fcntl.F_GETFL)
fcntl.fcntl(fno, fcntl.F_SETFL, fcntl_old | os.O_NONBLOCK)
chr = 0
try:
#Hol den Schlüssel
c = sys.stdin.read(1)
if len(c):
while len(c):
chr = (chr << 8) + ord(c)
c = sys.stdin.read(1)
finally:
#Stdin rückgängig machen
fcntl.fcntl(fno, fcntl.F_SETFL, fcntl_old)
termios.tcsetattr(fno, termios.TCSANOW, attr_old)
return chr
if __name__ == "__main__":
while 1:
key = getkey()
#Beenden Sie mit der Eingabetaste und zeigen Sie an, ob eine Tasteneingabe vorliegt
if key == 10:
break
elif key:
print(key)
Recommended Posts