J'ai mon code et ça va à l'infini. Ce que je veux, c'est que si dans la fenêtre de commande unix si l'utilisateur entre un ctrl C, je veux que le programme termine la boucle en cours et sorte de la boucle. Donc je veux que ça casse, mais je veux que ça finisse la boucle actuelle. Est-ce que ctrl C est utilisé? Devrais-je regarder une autre entrée?Infinity Loop et la saisie de l'utilisateur comme terminaison
3
A
Répondre
3
Pour faire cela correctement et exactement comme vous le voulez, c'est un peu compliqué.
Fondamentalement, vous voulez piéger le Ctrl-C, configurer un drapeau, et continuer jusqu'au début de la boucle (ou la fin) où vous vérifiez ce drapeau. Cela peut être fait en utilisant le module signal
. Heureusement, quelqu'un a déjà fait cela et vous pouvez utiliser le code dans l'exemple linked.
Modifier: Sur la base de votre commentaire ci-dessous, une utilisation typique de la classe BreakHandler
est:
ih = BreakHandler()
ih.enable()
for x in big_set:
complex_operation_1()
complex_operation_2()
complex_operation_3()
# Check whether there was a break.
if ih.trapped:
# Stop the loop.
break
ih.disable()
# Back to usual operation
Questions connexes
- 1. Infinity, ActiveRecord et MySQL: stockage et comparaison
- 2. Test Rspec et Infinity en couleur
- 3. Infinity dans MSVC++
- 4. comment obtenir la chaîne entre [LOOP] ... [/ LOOP]
- 5. Flash Animation et Sound Loop
- 6. Infinity généré en code python
- 7. PHP Foreach Loop et DOMNodeList
- 8. Besoin de conseils sur l'acheminement et la terminaison d'appel VOIP
- 9. Saisie de calendrier comme l'application d'administration Django
- 10. pour loop to while loop + condition supplémentaire
- 11. Modifier la terminaison de ligne
- 12. Saisie de la date et de l'heure
- 13. Comment mettre infinity et moins l'infini dans Django FloatField?
- 14. COM Pointeurs et terminaison de processus
- 15. jquery et la saisie de texte
- 16. Valeur de la clé PHP foreach loop
- 17. javascript pour() loop, split() et array question
- 18. T-SQL While Loop et concaténation
- 19. terminaison RCDATA
- 20. Redirection loop
- 21. YUI paginator infinity records dans le tableau
- 22. MASM32 loop
- 23. PHP et MS SQL - Foreach Loop?
- 24. Quelle est la différence entre while (true) et loop?
- 25. Zone de saisie de texte comme l'application SMS sur l'iPhone
- 26. F # Terminaison de récursion
- 27. Loop through array, et ouput dans Div
- 28. JavaScript et XML Dom - Nested Loop
- 29. terminaison de processus
- 30. Iphone Erreur de terminaison en réponse à la terminaison de SpringBoard
pour x dans big_set: complex_operation_1() complex_operation_2() complex_operation_3() # Vérifiez si il y avait une pause. si ih.trapped: # Arrête la boucle. pause ih.disable() # Retour à l'opération habituelle ... donc pour cette partie la seule chose que je devrais faire pour le lancer est si ih.trapped: # Arrêtez la boucle. break ih.disable() à la fin de mon code alors? – Yuki
@Yuki: ajouter du code aux commentaires perd son formatage qui gâche le code Python, mais il semble que vous ayez largement raison. Vous devez faire 'bh = BreakHandler(); bh.enable() 'avant la boucle, bien sûr. –
J'ai ceci: (Je ne sais pas pour le moment comment transformer le code ici en plus agréable le format) ih = BreakHandler() ih.enable() while (true): * Faites tout * si ih.trapped: break ih.disable() – Yuki