Entrée clé qui n'attend pas l'entrée clé en Python

Les touches de fonction et les touches de curseur peuvent également être identifiées. Il n'est pas possible de juger de l'entrée unique de la touche Shift ou de la touche Contrôle, mais la pression simultanée avec la touche de caractère peut être identifiée. Lorsque le masque termios.ISIG est activé, Cntl + C accepte le programme comme entrée clé sans s'arrêter.

point

--Désactiver l'écho dans les termios, désactiver le mode canonique --Réglez en mode NONBLOCK avec fcntl

getkey.py


import fcntl
import termios
import sys
import os

def getkey():
    fno = sys.stdin.fileno()

    #Récupère l'attribut terminal de stdin
    attr_old = termios.tcgetattr(fno)

    #Écho stdin désactivé, mode canonique désactivé
    attr = termios.tcgetattr(fno)
    attr[3] = attr[3] & ~termios.ECHO & ~termios.ICANON # & ~termios.ISIG
    termios.tcsetattr(fno, termios.TCSADRAIN, attr)

    #Réglez stdin sur NONBLOCK
    fcntl_old = fcntl.fcntl(fno, fcntl.F_GETFL)
    fcntl.fcntl(fno, fcntl.F_SETFL, fcntl_old | os.O_NONBLOCK)

    chr = 0

    try:
        #Obtenez la clé
        c = sys.stdin.read(1)
        if len(c):
            while len(c):
                chr = (chr << 8) + ord(c)
                c = sys.stdin.read(1)
    finally:
        #Annuler stdin
        fcntl.fcntl(fno, fcntl.F_SETFL, fcntl_old)
        termios.tcsetattr(fno, termios.TCSANOW, attr_old)

    return chr

if __name__ == "__main__":
    while 1:
        key = getkey()
        #Quitter avec enter, afficher s'il y a une entrée clé
        if key == 10:
            break
        elif key:
            print(key)

Recommended Posts

Entrée clé qui n'attend pas l'entrée clé en Python
Séquence de touches en Python
Séquence de touches en Python
Comment déterminer qu'une clé croisée a été entrée dans Python3
Traitement lorsque l'entrée clé de pygame Python ne se passe pas bien.
Note d'entrée Python dans AtCoder
Techniques de tri en Python
la version de python ne change pas
À propos de "for _ in range ():" de python
[Python] Pourquoi les tranches ne provoquent pas d'erreurs d'index
[Pour les débutants] Résumé de l'entrée standard en Python (avec explication)
[MQTT / Python] Implémentation d'une classe qui fait Pub / Sub de MQTT en Python
Rechercher les fuites de mémoire dans Python
Voulez-vous attendre un usage général avec Python Selenium?
Rechercher des commandes externes avec python
Un enregistrement que GAMEBOY n'a pas pu être fait avec Python. (PYBOY)
Problème de ne pas casser dans discord.py
33 chaînes à ne pas utiliser comme noms de variables en python
Voyons voir l'utilisation de l'entrée en python
Clé étrangère dans SQLite de Python [Note]
Notes pour l'entrée / sortie de fichier Python
Un codec Python spécial qui semble savoir mais ne sait pas
Résumé de l'entrée standard de Python pouvant être utilisée dans Competition Pro
L'histoire selon laquelle le remplacement de la liste bidimensionnelle n'a pas fonctionné en python
Exécutez unittest en Python (pour les débutants)
Présentation d'une bibliothèque qui n'était pas incluse dans pip sur Python / Windows
python> n'inclut pas les lettres mm> si "mm" pas dans le texte: / print "sans mm"
Obtenez la clé pour la migration de la deuxième couche de données JSON avec python
[50 comptes] Transmission de clé à l'aide de Python pour Windows
Note de nfc.ContactlessFrontend () de nfcpy de python
Inject est recommandé pour DDD en Python
Conseils pour gérer les binaires en Python
Résumé de diverses instructions for en Python
Tapez les annotations pour Python2 dans les fichiers stub!
[VScode] Le format autopep8 ne fonctionne pas [Python]
Virtualenv ne fonctionne pas sur Python 3.5 (Windows)
Modèle pour l'écriture de scripts batch en python
Python / dictionary> setdefault ()> Ajouter si pas dans le dictionnaire
Traiter plusieurs listes avec for en Python
MongoDB avec Python pour la première fois
Python> Python n'inclut pas le dernier décalage
Obtenez un jeton pour conoha avec python
Exemple de gestion des fichiers eml en Python
tensorflow n'entre pas dans windows + anaconda.
Tkinter n'a pas pu être importé en Python
Fiche de triche AtCoder en python (pour moi-même)
J'ai cherché un nombre premier avec python
Remarques sur l'utilisation de python (pydev) avec eclipse
Dans Ruby, inspect ne remplace pas to_s
Conseils pour créer de petits outils avec python
Utilisez pathlib dans Maya (Python2.7) en préparation du prochain Python3.7
Ensemble d'entrées standard Atcoder pour les débutants (python)
Explication intuitive qui ne repose pas sur la formule du problème de Monty Hall et simulation avec Python
Utilisez autre chose qu'une chaîne <br> pour la clé <br> dict en Python
À propos du problème que la version python de Google App Engine ne maille pas
Collectez les tweets japonais qui n'incluent pas d'images, d'URL ou de réponses en Python
Correctif lorsque la recherche de texte intégral ne fonctionne pas dans l'environnement local GAE / Python
Modèle pour créer des applications de ligne de commande en Python