Clavier de saisie avec délai d'attente en Python
Comment feriez-vous demander à l'utilisateur pour une entrée mais le temps après N secondes?
Google pointant vers un mail thread à ce sujet à http://mail.python.org/pipermail/python-list/2006-January/533215.html mais il semble ne pas fonctionner. L'état dans lequel le délai d'attente se produit, peu importe si c'est un sys.d'entrée.readline ou de la minuterie.sleep(), j'obtiens toujours:
< 'type d'exceptions.TypeError " >: [raw_]d'entrée prévu au plus 1 arguments, a obtenu 2
qui en quelque sorte l'exception ne parvient pas à l'attraper.
- connexes: Python 3 Chronométré d'Entrée
- double possible de Timeout sur un Python appel de la fonction
- connexes: raw_input de délai d'attente et /3471461
- connexes: Comment régler l'heure limite d'entrée /2933399
- Depuis que cette question semble servir un double objectif, ici le lien vers mon accepté de répondre à une double question. Caractéristiques - indépendant de la Plateforme (Unix / Windows). - StdLib seulement, sans dépendances externes. - Threads, pas de sous-processus. - Interruption immédiate au délai d'attente. - Nettoyer l'arrêt de prompteur au délai d'attente. - Nombre illimité d'entrées possible pendant un laps de temps. - Facile extensible PromptManager classe. - Programme peut reprendre après un délai d'attente, plusieurs pistes de prompteur cas possible sans redémarrage du programme.
Vous devez vous connecter pour publier un commentaire.
L'exemple que vous avez lié est mauvais et l'exception est en fait se produisant lors de l'appel d'alarme gestionnaire au lieu de quand lire des blocs. Mieux, essayez ceci:
"interrupted"
au bout de 5 secondes, mais il ne fait pas arrêter leinput
. Il attend encore pour Entrer à être pressé, et il imprime tout texte que j'ai sur entrée après le "Interrompu" et un message apparaît. Testé sur Linux avec Python 2 et 3.L'aide d'une sélection d'appel est plus courte, et devrait être beaucoup plus portable
Pas un Python solution, mais...
J'ai couru dans, à ce problème avec un script qui s'exécute sous CentOS (Linux), et ce qui a fonctionné pour ma situation était en cours d'exécution juste le Bash "lire -t" de la commande dans un sous-processus. Brutal dégoûtant hack, je sais, mais je me sens coupable, assez sur la façon dont il a travaillé, que je voulais partager avec tout le monde ici.
Avais-je besoin de quelque chose, qui ont attendu pendant 30 secondes, à moins que la touche ENTRÉE est enfoncée. Cela a très bien fonctionné.
Et voici un qui fonctionne sur Windows
Je n'ai pas été en mesure d'obtenir l'un de ces exemples pour travailler sur Windows donc j'ai fusionné des différents StackOverflow réponses pour obtenir le suivant:
Paul réponse n'a pas assez de travail. Modifié le code ci-dessous qui fonctionne pour moi sur
windows 7 x64
vanille CMD shell (par exemple, pas git-bash ou d'autres non-M$ shell)
-- rien
msvcrt
travaille dans git-bash il apparaît.python 3.6
(Je suis de poster une nouvelle réponse, parce que l'édition de Paul répond directement allait changer à partir de python 2.x-->3.x, ce qui semble trop pour un point de montage (py2 est encore en usage)
J'ai passé une bonne vingtaine de minutes sur ce, j'ai donc pensé que ça valait le coup pour mettre cela en place ici. Il est directement en profitant de user137673 de réponse. Je l'ai trouvé plus utile de faire quelque chose comme ceci:
Code suivant a travaillé pour moi.
J'ai utilisé deux fils l'un à obtenir le raw_Input et un autre à attendre pendant un temps précis.
Si l'un des quitte thread, le thread est terminé et est retourné.
Analogue à Locane pour windows:
Ici est un portable simple et Python 3 solution à l'aide de threads.
C'est la seule qui a fonctionné pour moi, tout en étant de la croix-plate-forme.
D'autres choses que j'ai essayé tous les problèmes:
ma croix plate-forme de solution
Une réponse tardive 🙂
Je voudrais faire quelque chose comme ceci:
Je sais que ce n'est pas le même, mais beaucoup de la vie réelle problème pourrait être résolu de cette façon. (Habituellement, j'ai besoin de timeout pour la saisie de l'utilisateur, quand je veux quelque chose de continuer à courir, si l'utilisateur n'est pas là pour le moment.)
Espérons que cela, au moins partiellement, aide. (Si quelqu'un lit ça de toute façon 🙂 )