Comment détecter Échapper à la pression de touche en Python?
Je suis en cours d'exécution d'un processus dans une fenêtre de commande (Windows 7, Python 3.1) où je voudrais que l'utilisateur d'interrompre le processus en appuyant sur la touche echap. Toutefois, en appuyant sur la touche echap ne semble pas faire n'importe quoi :-(, la boucle ne brise jamais. J'ai également essayé de lancer le script à partir de l'intérieur de mon IDE (Aile), mais encore une fois, la boucle ne peut pas être interrompu.
Ce qui suit est une version allégée de ma preuve-de-concept de test...
import msvcrt
import time
aborted = False
for time_remaining in range(10,0,-1):
# First of all, check if ESCape was pressed
if msvcrt.kbhit() and msvcrt.getch()==chr(27):
aborted = True
break
print(str(time_remaining)) # so I can see loop is working
time.sleep(1) # delay for 1 second
#endfor timing loop
if aborted:
print("Program was aborted")
else:
print("Program was not aborted")
time.sleep(5) # to see result in command window before it disappears!
Si quelqu'un pourrait me dire où je peut mal se passer, je vous en serais très reconnaissant.
OriginalL'auteur Alan Harris-Reid | 2011-02-28
Vous devez vous connecter pour publier un commentaire.
Python 3 chaînes unicode et, par conséquent, doit être encodée à octets pour la comparaison. Essayez ce test:
Ou de ce test:
Ou de ce test:
OriginalL'auteur Adeel Zafar Soomro
Vous n'avez pas besoin de coder, décoder, chr, ord, ....
ou si vous aimeriez voir "27" dans le code quelque part:
OriginalL'auteur John Machin
Vous devriez vraiment bande de plus, comme celle-ci:
Voici donc le problème:
msvcrt.getch()
retourneoctets
,chr(27)
retournestring
. En Python 3, ils sont de deux types distincts, de sorte que le "==
" la partie ne fonctionnera jamais, et laif
déclaration sera toujours évaluée commeFalse
.La solution devrait être évident pour vous.
Plus sur les chaînes vs octets, à partir du livre de Plongée en Python 3.
La console interactive est très utile pour le débogage, essayez de l'utiliser plus 🙂
OriginalL'auteur Wang Dingwei
Python 2/3 du code compatible:
Parties de Code sont prises à partir de
pager
module avec plus de choses à l'intérieur.OriginalL'auteur anatoly techtonik
Avez-vous essayé d'utiliser une autre clé pour tester si ce n'est pas juste que la clé?
Avez-vous aussi essayer les exemples en (http://effbot.org/librarybook/msvcrt.htm) pour voir si ils ont travaillé?
OriginalL'auteur Corey Richardson