[Python] Fwd: pynput: help request.
Gabriele Battaglia
iz4apu a libero.it
Mer 25 Lug 2018 10:38:13 CEST
Reply to the Manlio Perillo's message, wrote on 24/07/2018 at 22:47:
> On Tue, Jul 24, 2018 at 12:03 PM Gabriele Battaglia <iz4apu a libero.it> wrote:
>>
>> Ciao.
>> Avevo chiesto, ad una comunità online di Python, un aiuto per capirci
>> qualcosa di questa libreria, avrei voluto vedere un esempio di
>> funzionamento.
>> Posto qui il mio messaggio originale, se qualcuno ha uno script
>> funzionante che la include, potrebbe inviarmelo, per favore?
>>
>
> pynput ha delle limitazioni abbastanza severe:
> https://pynput.readthedocs.io/en/latest/limitations.html
>
> Sono accettabili per te?
Onestamente, Manlio, non so risponderti: ho letto la pagina linkata qui
sopra ma non posseggo le competenze sufficienti per comprendere a fondo
ciò che riporta. Azzarderei un "Non mi sembra che siano limitazioni
importanti per me", ma chiaramente non ne sono affatto certo. Tuttavia,
potrebbe essere un problema secondario. Potrei provare ad usare la
libreria quando e se riuscirò a capire come diavolo funziona, e poi
vediamo l'eventuale perchè non funziona.
[...]
> Se il tuo script gira su terminale, esiste un implementazione senza
> queste limitazioni.
Che significa? Un'implementazione di che, di Pynput stessa o del
terminale? Sì, per problemi di accessibilità ed anche per mia personale
incompetenza, tutti gli strumenti che realizzo in Python, girano sulla
console di Windows e sul Terminale di MacOS. Niente grafica perciò,
niente GUI di nessun tipo, soltanto scritte su terminale.
>
> Comunque se sei su Windows puoi usare pyunput o msvcrt.getwche per
> implementare una bozza, e da questa chiedere consigli più dettagliati.
Ce l'ho già. Mi ero scritto un programma che funziona perfettamente e fa
ciò che voglio. Funziona stupendamente sia sotto Win che sotto MacOS
però... funziona solo per Python2 e, per un motivo che non sono in grado
di capire, non riesco ASSOLUTAMENTE a migrarlo sul 3. Correggo il codice
a livello formale, ma qualcosa smette di funzionare e non trovo una
soluzione.
Se vuoi/volete... lo posto qui in lista nel caso qualcuno avesse voglia
di buttarci un occhio... Non è lungo e il codice non è complesso.
>
> Da quello che leggo in
> https://github.com/python/cpython/blob/master/Lib/getpass.py#L97,
> getwch(e) ha il problema che non processa l'input e quindi devi
> gestire il KeyboardInterrupt da te. Ma usando SetConsoleMode
> (https://docs.microsoft.com/en-us/windows/console/setconsolemode)
> dovrebbe essere possibile implementare la lettura da console secondo
> le tue necessità semplicemente resettando *solo* il flag
> ENABLE_LINE_INPUT.
Devo chiedere venia ancora una volta, mostrando tutta la mia ignoranza:
sono ad un livello più niubbo di quanto credi. Non mi pare d'aver mai
giocato con i flags del prompt di DOS, ne con quelli del terminale su
MacOS: ho sempre lasciato tutto di default direi e lo script che mi va
perfettamente sotto Python2 e che ho chiamato key.py, per l'appunto,
va... Senza che ci sia stata necessità di modificare flags.
[...]
> Che cosa vuoi fare? Intercettare la pressione dei tasti da tastiera a
> basso livello, o semplicemente leggere un carattere alla volta dalla
> tastiera senza che l'utente premi INVIO?
Principalmente la seconda che dici. In pratica mi serve che determinate
azioni partano quando io premo dei tasti, senza aspettare l'invio, che
toglie immediatezza alla cosa. Questo è importante quando scrivo dei
piccoli giochi, o quando la pressione dei tasti serve a compiere azioni
che si ripetono spesso.
Sarebbe bello poter fare quello che permette il modulo keyboard di
pygame che provvede un array nel quale, per ogni tasto, ritorna un flag
booleano quando il tasto viene premuto ed un altro quando viene
rilasciato; questo sarebbe proprio fiko per i miei scopi, ma il modulo
pygame non posso usarlo perchè, per funzionare, richiede una modalità
grafica attiva, che inibisce il modo console, quindi niente più print()
sulla console.
A me comunque, basterebbe una funzione che mi ritorni il codice ASCII
del carattere quando viene premuto e null quando non è premuto niente.
Io la interrogherei ogni tot millisecondi e nel frattempo il mio
programma si farebbe i fatti propri, senza interrompersi come con input()
Tutto qui. Grazie infinite per il tuo interesse, per le ricerche che hai
fatto, per il tuo tempo e la tua gentilezza.
GabryB.
Maggiori informazioni sulla lista
Python