HOWTO · Python
Come rilevare la pressione dei tasti in Python
Scopri come rilevare l'input da tastiera in Python con keyboard, pynput e readchar, inclusi gli eventi di pressione e rilascio e l'input di un singolo tasto nel terminale.
In questa pagina
Per rilevare l’input da tastiera in Python, scegli una libreria in base alla provenienza dell’input: keyboard offre hook a livello di sistema, pynput fornisce callback di pressione e rilascio e readchar legge un tasto in un programma a riga di comando senza attendere Invio. Installa il pacchetto che scegli, quindi adatta il suo callback o il suo ciclo di lettura alla tua attività. Gli esempi specifici dei pacchetti riportati di seguito dipendono da librerie di terze parti e dall’accesso a una tastiera o a un terminale interattivo, quindi sono mostrati come guida all’API e non hanno alcun output acquisito.
Rilevare la pressione dei tasti con il modulo keyboard in Python
Il pacchetto keyboard può installare un hook che riceve gli eventi della tastiera. Installalo nello stesso ambiente Python che esegue il tuo programma con python -m pip install keyboard. Su alcuni sistemi operativi, gli hook globali della tastiera possono richiedere privilegi elevati o essere limitati dall’ambiente desktop. Un hook riceve sia gli eventi di pressione sia quelli di rilascio di un tasto; filtra su event.event_type == "down" quando l’attività consiste nel segnalare le pressioni. Un’integrazione tipica registra un callback con keyboard.hook(on_key_event) e resta in ascolto con keyboard.wait("esc"). Rimuovi un hook con keyboard.unhook_all() quando l’ascolto termina ma il processo continua a svolgere altro lavoro. Mantieni brevi i callback in modo che la gestione degli eventi non ritardi il resto del programma.
Questo esempio autonomo utilizza record di eventi di esempio per mostrare la logica di filtraggio utilizzata da un callback di hook. Non legge gli eventi fisici della tastiera; a tale scopo utilizza l’integrazione del pacchetto descritta sopra.
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
Rilevare la pressione dei tasti con il modulo pynput in Python
Utilizza pynput quando il programma ha bisogno di gestori separati per la pressione e il rilascio dei tasti. Installalo con python -m pip install pynput. Un listener viene creato con keyboard.Listener(on_press=on_press, on_release=on_release) e avviato con il suo gestore di contesto o con start(). Nel callback di pressione, i tasti carattere espongono un valore char, mentre i tasti speciali come Esc potrebbero non farlo; verifica che l’attributo esista e non sia None prima di leggerlo. Il callback di rilascio può confrontare il tasto con keyboard.Key.esc e restituire False per arrestare il listener. Chiama join() quando il thread principale deve attendere il completamento del listener. Questo flusso di callback specifico del pacchetto non viene eseguito qui perché pynput non è disponibile nel runtime fornito; anche le autorizzazioni del sistema operativo e le restrizioni della sessione desktop possono influire sull’accesso all’input di sistema.
Rilevare la pressione dei tasti con il modulo readchar in Python
Per un prompt a riga di comando che ha bisogno di un tasto alla volta, readchar legge un tasto senza richiedere all’utente di premere Invio. Installalo con python -m pip install readchar. In un ciclo, chiama readchar.readkey() per attendere in modo sincrono l’input del terminale, quindi confronta il tasto restituito con "q" per terminare il ciclo. Stampa gli altri tasti restituiti man mano che arrivano. Questo è adatto all’interazione con il terminale, non a un hook globale che osserva i tasti mentre un’altra applicazione ha il focus. I tasti freccia e altri tasti speciali possono essere rappresentati da sequenze di più caratteri, quindi confrontali con i valori documentati per il terminale e la libreria quando li gestisci. Questa interazione specifica del pacchetto non viene eseguita qui perché readchar non è disponibile nel runtime fornito.
Conclusione
Scegli keyboard per un hook che reagisce agli eventi della tastiera di sistema, pynput quando i callback di pressione e rilascio o il controllo esplicito del ciclo di vita del listener si adattano al programma e readchar per un semplice prompt a riga di comando con un singolo tasto. I primi due ascoltano eventi al di là di un prompt e possono dipendere dalle autorizzazioni del sistema operativo. readchar legge dal terminale attivo e non fornisce un monitoraggio globale. Installa il pacchetto selezionato nell’ambiente che esegue il tuo script e scegli una condizione di arresto chiara come Esc o q in modo che il listener o il ciclo di lettura possano terminare in modo prevedibile.