Python - Infini boucle while, pause sur la saisie de l'utilisateur
J'ai un infini tandis que la boucle que j'ai envie de casser avec le temps lorsque l'utilisateur appuie sur une touche. Habituellement j'utilise raw_input
pour obtenir la réponse de l'utilisateur; cependant, j'ai besoin de raw_input
de ne pas attendre la réponse. Je veux quelque chose comme ceci:
print 'Press enter to continue.'
while True:
# Do stuff
#
# User pressed enter, break out of loop
Cela devrait être simple, mais je n'arrive pas à le comprendre. Je me suis penché vers une solution en utilisant les threads, mais je préfère ne pas avoir à le faire. Comment puis-je y arriver?
Ce fil pourrait être utile (contient un exemple de travail avec les malédictions): ubuntuforums.org/showthread.php?t=1514035
L'écoute d'un événement?
Il y a des Fenêtres des moyens spécifiques pour ce faire, dans le
Pas exactement. Je suis l'enregistrement de données, pour quelque chose qui est manuellement commencé et s'est terminée par l'utilisateur. C'est quelque chose qui ne peut pas être contrôlé, actuellement, à partir de mon script.
Le fil est également liée à une recette qui pourrait être applicable: code.activestate.com/recipes/...
L'écoute d'un événement?
Il y a des Fenêtres des moyens spécifiques pour ce faire, dans le
msvcrt
module.Pas exactement. Je suis l'enregistrement de données, pour quelque chose qui est manuellement commencé et s'est terminée par l'utilisateur. C'est quelque chose qui ne peut pas être contrôlé, actuellement, à partir de mon script.
Le fil est également liée à une recette qui pourrait être applicable: code.activestate.com/recipes/...
OriginalL'auteur TehTechGuy | 2013-12-13
Vous devez vous connecter pour publier un commentaire.
Je pense que vous pouvez faire mieux avec msvcrt:
Malheureusement toujours spécifiques à windows.
OriginalL'auteur octref
Vous pouvez utiliser non bloquant lire depuis l'entrée standard stdin:
OriginalL'auteur micromoses
Sur python 3.5, vous pouvez utiliser le code suivant. Il peut être ajusté pour une séquence de touches spécifique. La boucle while continue à fonctionner jusqu'à ce que l'utilisateur appuie sur une touche.
OriginalL'auteur gtcoder
À l'aide de la
msvcrt
module thebjorn recommandé j'ai été en mesure de venir avec quelque chose qui fonctionne. Ce qui suit est un exemple de base qui va sortir de la boucle si une touche est enfoncée, pas juste à l'entrée.OriginalL'auteur TehTechGuy
Ce que vous avez besoin est un non-blocage des entrées brutes, si vous ne voulez pas utiliser les threads il existe une solution simple comme celle-ci où il est en train de faire un délai d'attente de 20 ms, puis soulever et d'exception si l'utilisateur n'appuyez pas sur une touche, si il ne le fait alors la classe renvoie à la touche enfoncée.
Le code Source
OriginalL'auteur moisesvega
Je ne pouvais pas obtenir une partie de la populaire réponses de travail. Donc, je suis venu avec un autre en utilisant l'approche de
CTRL
+C
pour brancher l'entrée de l'utilisateur et s'imbiber d'une interruption de clavier. Une solution simple peut être à l'aide d'un bloc try-catch,J'ai eu cette idée à partir de l'exécution d'un certain nombre de serveurs comme fiole et django. Ce qui peut être légèrement différent de ce que l'OP a demandé, mais cela pourrait aider quelqu'un d'autre qui voulait qu'une chose semblable.
OriginalL'auteur lU5er