Schlüsseleingabe, die nicht auf Schlüsseleingabe in Python wartet

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

Schlüsseleingabe, die nicht auf Schlüsseleingabe in Python wartet
Tastenanschlag in Python
Tastenanschlag in Python
So stellen Sie fest, dass in Python3 ein Kreuzschlüssel eingegeben wurde
Verarbeitung, wenn die Schlüsseleingabe von Python-Pygame nicht gut funktioniert.
Python-Eingabehinweis in AtCoder
Techniken zum Sortieren in Python
Python-Version wechselt nicht
Über "für _ in range ():" von Python
[Python] Warum Slices keine Indexfehler verursachen
[Für Anfänger] Zusammenfassung der Standardeingabe in Python (mit Erklärung)
[MQTT / Python] Implementierte eine Klasse, die Pub / Sub von MQTT in Python ausführt
Überprüfen Sie Python auf Speicherlecks
Möchten Sie mit Python Selenium auf allgemeine Zwecke warten?
Suchen Sie mit Python nach externen Befehlen
Ein Datensatz, den GAMEBOY mit Python nicht erstellen konnte. (PYBOY)
Problem, discord.py nicht einzubrechen
33 Zeichenfolgen, die in Python nicht als Variablennamen verwendet werden sollten
Mal sehen, wie man Eingaben in Python verwendet
Fremdschlüssel in SQLite von Python [Hinweis]
Hinweise zur Eingabe / Ausgabe von Python-Dateien
Python-Spezialcodec, der zu wissen scheint, aber nicht weiß
Zusammenfassung der Standardeingabe von Python, die in Competition Pro verwendet werden kann
Die Geschichte, dass das Ersetzen der zweidimensionalen Liste in Python nicht funktioniert hat
Führen Sie unittest in Python aus (für Anfänger)
Einführung einer Bibliothek, die unter Python / Windows nicht in pip enthalten war
Python> enthält die Buchstaben mm> nicht, wenn "mm" nicht im Text enthalten ist: / print "mm nicht enthalten"
Holen Sie sich den Schlüssel für die Migration von JSON-Daten auf der zweiten Ebene mit Python
[50 zählt] Schlüsselübertragung mit Python für Windows
Anmerkung von nfc.ContactlessFrontend () von nfcpy von Python
Inject wird für DDD in Python empfohlen
Tipps zum Umgang mit Binärdateien in Python
Zusammenfassung verschiedener for-Anweisungen in Python
Geben Sie Anmerkungen für Python2 in Stub-Dateien ein!
Das Autopep8-Format [VScode] funktioniert nicht. [Python]
Virtualenv funktioniert nicht unter Python 3.5 (Windows)
Vorlage zum Schreiben von Batch-Skripten in Python
Python / Wörterbuch> setdefault ()> Hinzufügen, wenn nicht im Wörterbuch
Verarbeiten Sie mehrere Listen mit for in Python
MongoDB mit Python zum ersten Mal
Python> Python enthält nicht den letzten Offset
Holen Sie sich ein Zeichen für Conoha mit Python
Beispiel für den Umgang mit EML-Dateien in Python
Tensorflow tritt nicht in Windows + Anaconda ein.
Tkinter konnte nicht in Python importiert werden
AtCoder Spickzettel in Python (für mich)
Ich habe mit Python nach einer Primzahl gesucht
Hinweise zur Verwendung von Python (Pydev) mit Eclipse
In Ruby ersetzt inspect nicht to_s
Tipps zum Erstellen kleiner Werkzeuge mit Python
Verwenden Sie pathlib in Maya (Python2.7), um sich auf das kommende Python3.7 vorzubereiten
Atcoder-Standardeingabesatz für Anfänger (Python)
Intuitive Erklärung, die nicht auf der Formel des Monty Hall-Problems und der Simulation mit Python beruht
Verwenden Sie für den Diktatschlüssel in Python etwas anderes als eine <br> Zeichenfolge
Über das Problem, dass die Python-Version von Google App Engine nicht ineinander greift
Sammeln Sie japanische Tweets, die keine Bilder, URLs oder Antworten in Python enthalten
Patch, wenn die Volltextsuche in der lokalen GAE / Python-Umgebung nicht funktioniert
Vorlage zum Erstellen von Befehlszeilenanwendungen in Python