HOWTO · Python
Comment détecter la pression d'une touche en Python
Apprenez à détecter la saisie au clavier en Python avec keyboard, pynput et readchar, y compris les événements d'appui et de relâchement et la saisie d'une seule touche dans le terminal.
Sur cette page
Pour détecter la saisie au clavier en Python, choisissez une bibliothèque en fonction de l’origine de la saisie : keyboard offre des hooks au niveau du système, pynput fournit des callbacks d’appui et de relâchement, et readchar lit une touche dans un programme en ligne de commande sans attendre Entrée. Installez le package de votre choix, puis adaptez son callback ou sa boucle de lecture à votre tâche. Les exemples spécifiques à chaque package ci-dessous dépendent de bibliothèques tierces et de l’accès à un clavier ou à un terminal interactif ; ils sont donc présentés comme des indications sur l’API et n’ont aucune sortie capturée.
Pour découvrir les autres formes de saisie et d’interaction au clavier, suivez notre tutoriel Python, organisé par tâche à accomplir.
Détecter la pression d’une touche avec le module keyboard en Python
Le package keyboard peut installer un hook qui reçoit les événements du clavier. Installez-le dans le même environnement Python que celui qui exécute votre programme avec python -m pip install keyboard. Sur certains systèmes d’exploitation, les hooks globaux de clavier peuvent nécessiter des privilèges élevés ou être restreints par l’environnement de bureau. Un hook reçoit à la fois les événements d’appui et de relâchement de touche ; filtrez sur event.event_type == "down" lorsque la tâche consiste à signaler les appuis. Une intégration typique enregistre un callback avec keyboard.hook(on_key_event) et continue d’écouter avec keyboard.wait("esc"). Supprimez un hook avec keyboard.unhook_all() lorsque l’écoute se termine mais que le processus continue d’effectuer d’autres tâches. Gardez les callbacks courts afin que la gestion des événements ne retarde pas le reste du programme.
Cet exemple autonome utilise des enregistrements d’événements d’exemple pour montrer la logique de filtrage utilisée par un callback de hook. Il ne lit pas les événements physiques du clavier ; utilisez pour cela l’intégration du package ci-dessus.
events = [
{"name": "a", "event_type": "down"},
{"name": "a", "event_type": "up"},
]
for event in events:
if event["event_type"] == "down":
print(f"Key {event['name']} pressed")
Key a pressed
Détecter la pression d’une touche avec le module pynput en Python
Utilisez pynput lorsque le programme a besoin de gestionnaires distincts pour les appuis et les relâchements de touches. Installez-le avec python -m pip install pynput. Un listener est créé avec keyboard.Listener(on_press=on_press, on_release=on_release) et démarré avec son gestionnaire de contexte ou start(). Dans le callback d’appui, les touches de caractères exposent une valeur char, tandis que les touches spéciales comme Échap peuvent ne pas le faire ; vérifiez que l’attribut existe et n’est pas None avant de le lire. Le callback de relâchement peut comparer la touche avec keyboard.Key.esc et renvoyer False pour arrêter le listener. Appelez join() lorsque le thread principal doit attendre la fin du listener. Ce flux de callbacks spécifique au package n’est pas exécuté ici, car pynput n’est pas disponible dans l’environnement d’exécution fourni ; les autorisations du système d’exploitation et les restrictions de la session de bureau peuvent également affecter l’accès aux entrées du système.
Détecter la pression d’une touche avec le module readchar en Python
Pour une invite en ligne de commande qui a besoin d’une touche à la fois, readchar lit une touche sans obliger l’utilisateur à appuyer sur Entrée. Installez-le avec python -m pip install readchar. Dans une boucle, appelez readchar.readkey() pour attendre de manière synchrone une entrée du terminal, puis comparez la touche renvoyée avec "q" pour terminer la boucle. Affichez les autres touches renvoyées au fur et à mesure qu’elles arrivent. Ceci convient à l’interaction avec le terminal, et non à un hook global qui surveille les touches pendant qu’une autre application a le focus. Les touches fléchées et d’autres touches spéciales peuvent être représentées par des séquences de plusieurs caractères ; comparez-les donc aux valeurs documentées pour le terminal et la bibliothèque lorsque vous les traitez. Cette interaction spécifique au package n’est pas exécutée ici, car readchar n’est pas disponible dans l’environnement d’exécution fourni.
Conclusion
Choisissez keyboard pour un hook qui réagit aux événements du clavier du système, pynput lorsque les callbacks d’appui et de relâchement ou le contrôle explicite du cycle de vie du listener conviennent au programme, et readchar pour une invite en ligne de commande simple à une seule touche. Les deux premiers écoutent des événements au-delà d’une invite et peuvent dépendre des autorisations du système d’exploitation. readchar lit depuis le terminal actif et ne fournit pas de surveillance globale. Installez le package sélectionné dans l’environnement qui exécute votre script, et choisissez une condition d’arrêt claire comme Échap ou q pour que le listener ou la boucle de lecture puisse se terminer de manière prévisible.