HOWTO · Python
Cómo detectar la pulsación de teclas en Python
Aprenda a detectar la entrada del teclado en Python con keyboard, pynput y readchar, incluidos los eventos de pulsación y liberación y la entrada de una sola tecla en la terminal.
En esta página
Para detectar la entrada del teclado en Python, elija una biblioteca según el origen de la entrada: keyboard ofrece ganchos a nivel del sistema, pynput proporciona devoluciones de llamada de pulsación y liberación, y readchar lee una tecla en un programa de línea de comandos sin esperar a Enter. Instale el paquete que elija y luego adapte su devolución de llamada o su bucle de lectura a su tarea. Los ejemplos específicos de cada paquete que aparecen a continuación dependen de bibliotecas de terceros y del acceso a un teclado o a una terminal interactiva, por lo que se muestran como guía de la API y no tienen salida capturada.
Detectar la pulsación de teclas con el módulo keyboard en Python
El paquete keyboard puede instalar un gancho que recibe eventos del teclado. Instálelo en el mismo entorno de Python que ejecuta su programa con python -m pip install keyboard. En algunos sistemas operativos, los ganchos globales de teclado pueden requerir privilegios elevados o estar restringidos por el entorno de escritorio. Un gancho recibe eventos tanto de pulsación como de liberación de teclas; filtre por event.event_type == "down" cuando la tarea sea informar de las pulsaciones. Una integración típica registra una devolución de llamada con keyboard.hook(on_key_event) y sigue escuchando con keyboard.wait("esc"). Elimine un gancho con keyboard.unhook_all() cuando la escucha termina pero el proceso sigue haciendo otro trabajo. Mantenga breves las devoluciones de llamada para que el manejo de eventos no retrase el resto del programa.
Este ejemplo autónomo utiliza registros de eventos de muestra para mostrar la lógica de filtrado que usa una devolución de llamada de gancho. No lee eventos físicos del teclado; utilice para ello la integración del paquete descrita arriba.
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
Detectar la pulsación de teclas con el módulo pynput en Python
Utilice pynput cuando el programa necesite controladores separados para la pulsación y la liberación de teclas. Instálelo con python -m pip install pynput. Un listener se crea con keyboard.Listener(on_press=on_press, on_release=on_release) y se inicia con su administrador de contexto o con start(). En la devolución de llamada de pulsación, las teclas de caracteres exponen un valor char, mientras que las teclas especiales como Escape pueden no hacerlo; compruebe que el atributo existe y no es None antes de leerlo. La devolución de llamada de liberación puede comparar la tecla con keyboard.Key.esc y devolver False para detener el listener. Llame a join() cuando el hilo principal deba esperar a que el listener termine. Este flujo de devoluciones de llamada específico del paquete no se ejecuta aquí porque pynput no está disponible en el entorno de ejecución proporcionado; los permisos del sistema operativo y las restricciones de la sesión de escritorio también pueden afectar al acceso a la entrada del sistema.
Detectar la pulsación de teclas con el módulo readchar en Python
Para un indicador de línea de comandos que necesita una tecla cada vez, readchar lee una tecla sin requerir que el usuario pulse Enter. Instálelo con python -m pip install readchar. En un bucle, llame a readchar.readkey() para esperar de forma síncrona la entrada de la terminal y luego compare la tecla devuelta con "q" para terminar el bucle. Imprima las demás teclas devueltas a medida que llegan. Esto es adecuado para la interacción con la terminal, no para un gancho global que vigila las teclas mientras otra aplicación tiene el foco. Las teclas de flecha y otras teclas especiales pueden estar representadas por secuencias de varios caracteres, así que compárelas con los valores documentados para la terminal y la biblioteca al manejarlas. Esta interacción específica del paquete no se ejecuta aquí porque readchar no está disponible en el entorno de ejecución proporcionado.
Conclusión
Elija keyboard para un gancho que reacciona a los eventos del teclado del sistema, pynput cuando las devoluciones de llamada de pulsación y liberación o el control explícito del ciclo de vida del listener se ajusten al programa, y readchar para un indicador de línea de comandos sencillo de una sola tecla. Los dos primeros escuchan eventos más allá de un indicador y pueden depender de los permisos del sistema operativo. readchar lee de la terminal activa y no proporciona monitoreo global. Instale el paquete seleccionado en el entorno que ejecuta su script y elija una condición de parada clara, como Escape o q, para que el listener o el bucle de lectura puedan terminar de forma predecible.