python - intercettare la pressione di un tasto
python - intercettare la pressione di un tasto
In un programma c'è una pesante elaborazione di file. Vorrei fare in maniera che, premendo un qualsiasi tasto (anche del mouse) il programma chiedesse se deve proseguire o se deve interrompere (alla fine dell'elaborazionbe della cartella) per fare un'altra operazione , alla fine della quale riprendere il lavoro dalla cartella successiva.
Come si può intercettare l'uso di un tasto?
Grazie...
Come si può intercettare l'uso di un tasto?
Grazie...
- vaeVictis
- Imperturbabile Insigne

- Messaggi: 4703
- Iscrizione: venerdì 27 luglio 2012, 17:58
- Desktop: Gnome
- Distribuzione: Ubuntu 20.04 64bit
Re: python - intercettare la pressione di un tasto
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
Re: python - intercettare la pressione di un tasto
Grazie per la risposta.
Non ho capito bene come fare per intercettare qualunque tasto....
Cercherò di capire di più appena ho un po' di tempo libero. Mi sembra comunque la strada giusta.
Ciao.
Non ho capito bene come fare per intercettare qualunque tasto....
Cercherò di capire di più appena ho un po' di tempo libero. Mi sembra comunque la strada giusta.
Ciao.
- vaeVictis
- Imperturbabile Insigne

- Messaggi: 4703
- Iscrizione: venerdì 27 luglio 2012, 17:58
- Desktop: Gnome
- Distribuzione: Ubuntu 20.04 64bit
Re: python - intercettare la pressione di un tasto
La tua richiesta è leggermente differente te da quella cui è indirizzata la mia risposta.
Credevo che per qualsiasi tasto stessi esprimendo in modo vago la gestione della interrupt.
Appena sono dal PC, ti scrivo più nel dettaglio.
Credevo che per qualsiasi tasto stessi esprimendo in modo vago la gestione della interrupt.
Appena sono dal PC, ti scrivo più nel dettaglio.
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
- Claudio_F
- Entusiasta Emergente

- Messaggi: 1463
- Iscrizione: lunedì 28 maggio 2012, 18:49
- Desktop: Mate/Gnome
- Distribuzione: Ubu22.04
Re: python - intercettare la pressione di un tasto
Se l'interfaccia è una GUI è banale, altrimenti per la shell ci sono un po'di cose interessanti googlando "getch in Python".
Re: python - intercettare la pressione di un tasto
credo serva settare il terminale in modalità non canonica: http://stackoverflow.com/a/358381
il comando unix è 'stty -icanon', in python puoi usare la libreria termios: https://docs.python.org/2/library/termios.html
modifico leggermente l'esempio della documentazione python (che non controlla per lo stato precedente di ICANON). conta che qualcosa di simile si può ottenere più semplicemente con il modulo 'tty', invocando tty.setraw(fd)
faccio un esempio dove esci dal loop quando l'utente preme il tasto Y (senza dover premere invio) od il tasto N (in questo caso ritornando False), quale dei due avviene prima.
(ovviamente se vuoi input 'in real time' senza che l'utente prema invio non basta soltanto cambiare il terminale in modalità non canonica, ma bisogna emulare 'getchar': raw_input non va bene. devi entrare, impostato il terminale in modalità non canonical, in un loop dove leggi i singoli caratteri con sys.stdin.read(1))
il comando unix è 'stty -icanon', in python puoi usare la libreria termios: https://docs.python.org/2/library/termios.html
modifico leggermente l'esempio della documentazione python (che non controlla per lo stato precedente di ICANON). conta che qualcosa di simile si può ottenere più semplicemente con il modulo 'tty', invocando tty.setraw(fd)
faccio un esempio dove esci dal loop quando l'utente preme il tasto Y (senza dover premere invio) od il tasto N (in questo caso ritornando False), quale dei due avviene prima.
Codice: Seleziona tutto
import termios, sys
def prova():
fd = sys.stdin.fileno()
old = termios.tcgetattr(fd)
new = termios.tcgetattr(fd)
new[3] = new[3] & ~termios.ICANON # lflags
print "Premi Y per confermare, N per annullare "
try:
termios.tcsetattr(fd, termios.TCSADRAIN, new)
ch = 0
while (ch != 'Y') and (ch != 'N'):
ch = sys.stdin.read(1)
finally:
termios.tcsetattr(fd, termios.TCSADRAIN, old)
if ch == 'Y':
print "\nHai confermato premendo Y"
return True
else:
print "\nHai annullato premendo N"
return False
We no longer think of chairs as technology; we just think of them as chairs. But there was a time when we hadn't worked out how many legs chairs should have, how tall they should be, and they would often 'crash' when we tried to use them.
Re: python - intercettare la pressione di un tasto
Grazie per la risposta ma confesso che non mi è chiaro.
Immaginiamo di avere un programma che legga 100 file, così fatto:
n=0
while n< 100:
.... leggi file....
.... elabora....
n+=1
Per interromperlo premendo un tasto (in qualunque momento ma interrompendo solo a fine elaborazione di un file), come dovrei fare?
Le istruzioni dell'esempio come le inserisco?
Grazie..
Immaginiamo di avere un programma che legga 100 file, così fatto:
n=0
while n< 100:
.... leggi file....
.... elabora....
n+=1
Per interromperlo premendo un tasto (in qualunque momento ma interrompendo solo a fine elaborazione di un file), come dovrei fare?
Le istruzioni dell'esempio come le inserisco?
Grazie..
Re: python - intercettare la pressione di un tasto
puoi estendere il ciclo di while che conta sino a 100 aggiungendo and (ch != 'N') e poi ottenendo 'ch' nel ciclo, od uscendo controllandolo con un if dopo averlo ottenuto, usando break.
il problema e' che rimarresti ad attendere la pressione di un tasto, qualsiasi esso sia, prima di continuare il ciclo, quindi o imposti una try con un timeout ragionevole, o devi usare un thread separato per l'input...
il problema e' che rimarresti ad attendere la pressione di un tasto, qualsiasi esso sia, prima di continuare il ciclo, quindi o imposti una try con un timeout ragionevole, o devi usare un thread separato per l'input...
We no longer think of chairs as technology; we just think of them as chairs. But there was a time when we hadn't worked out how many legs chairs should have, how tall they should be, and they would often 'crash' when we tried to use them.
Re: python - intercettare la pressione di un tasto
Ora credo di avere le idee più chiare.
Farò un programmino di prova
Grazie. Ciao..
Farò un programmino di prova
Grazie. Ciao..
Chi c’è in linea
Visualizzano questa sezione: 0 utenti iscritti e 2 ospiti