[Python] Non-Blocking input multiplatform. Era: Re: Fwd: pynput: help request.

Manlio Perillo manlio.perillo a gmail.com
Mer 25 Lug 2018 15:33:43 CEST


On Wed, Jul 25, 2018 at 3:24 PM Gabriele Battaglia <iz4apu a libero.it> wrote:
>
> Reply to the Manlio Perillo's message, wrote on 25/07/2018 at 14:53:
> > On Wed, Jul 25, 2018 at 1:59 PM Gabriele Battaglia <iz4apu a libero.it> wrote:
> >>
> >> Reply to the Manlio Perillo's message, wrote on 25/07/2018 at 13:13:
> >> [...]
> >>> Ottimo.
> >>> Allora dimentica tutto il resto che ho scritto e posta il codice su un
> >>> pastebin o su gist se hai un account github.
> >>> Cerca di eliminare tutte le parti che non sono necessarie.
> >> Ciao Manlio.
> >> Siccome sono pigro, io provo così, se poi, per qualche ragione tecnica
> >> non andasse bene, mi faccio l'account su github e te lo riposto là,
> >> fammi sapere se così va bene.
> >>
> >> Premessa: il modulo key.py che scarichi contiene 2 funzioni, guarda solo
> >> la key() e non la dgt(), di cui, eventualmente, mi occuperò in seguito.
> >>
> >> https://www.dropbox.com/s/195yfm2dpx407s2/key.py?dl=0
> >>
> >> Per migrarla su Python3, l'avevo corretta così:
> >>
> >> https://www.dropbox.com/s/mvcrhyglml2tg1d/key3.py?dl=0
> >>
> >> Ma senza successo.
> >>
> >
> > Perchè setti stdin in modalità non blocking?
> > Se elimini quel codice, il programma funziona, sia key.py che key3.py
> Ehm, so che sembrerà una frase da sitcom di serie B ma..."Cos'è che
> faccio io?" :)
> Con quale riga di codice, faccio questo settaggio? Se la trovo, :) la
> strozzo subito! :)
>

oldflags = fcntl.fcntl(fd, fcntl.F_GETFL)
fcntl.fcntl(fd, fcntl.F_SETFL, oldflags | os.O_NONBLOCK)

e
fcntl.fcntl(fd, fcntl.F_SETFL, oldflags)

Inoltre, invece di:
if sys.platform == "darwin":
    def key():
        ...
else if sys.platform = ""windows":
    def key():
        ....

ti consiglio di fare, per migliorare la leggibilità del codice:

def key_darwin():
    ....

def key_windows():
    ...

if sys.platform == "darwin":
    key = key_darwin
else if sys.platform = ""windows":
    key = key_windows


Infine, il codice per darwin funziona anche per linux.


Ciao
Manlio


Maggiori informazioni sulla lista Python