Aujourd’hui, nous allons plonger dans le sujet de quitter / terminer des scripts Python! Avant de commencer, vous devez avoir une compréhension de base de ce Qu’est Python et quelques connaissances de base sur son utilisation.
Vous pouvez utiliser l’e de votre choix, mais j’utiliserai le package Linux Subsystem for Windows (WSL) de Microsoft cette fois. Pour plus d’informations à ce sujet et comment vous l’activez sur Windows 10, Allez ici.
Table des Matières
Pourquoi Python automatiquement la sortie d’un script lorsque c’est fait?,
la façon dont Python exécute un bloc de code lui permet d’exécuter chaque ligne dans l’ordre, de vérifier les dépendances à importer, de lire les définitions et les classes à stocker en mémoire et d’exécuter des morceaux de code dans l’ordre permettant des boucles et des rappels aux définitions et classes définies.
lorsque L’interpréteur Python atteint la fin du fichier (EOF), il remarque qu’il ne peut plus lire de données de la source, que ce soit l’entrée de l’utilisateur via une ou la lecture d’un fichier. Pour démontrer, essayons d’obtenir l’entrée de l’utilisateur et d’interrompre l’interpréteur au milieu de l’exécution!,
tout d’Abord, à partir de votre terminal bash dans votre PowerShell ouvrir un nouveau fichier appelé « entrée.,n collez ce qui suit dans le shell en faisant un clic droit sur la fenêtre PowerShell
name=input("Don"t type anything!\n")print("Hi,",name,"!")
maintenant, appuyez sur CTRL+X
pour enregistrer et quitter la fenêtre nano et dans votre type de shell:
$ python3 input.pyDon"t type anything!
et appuyez sur CTRL+D
pour terminer le programme pendant qu’il attend l’entrée utilisateur
Traceback (most recent call last):File "input.py", line 1, in name=input("Don"t type anything!")EOFError
l’exception EOFError
nous indique que L’interpréteur Python a atteint la condition de fin de fichier (EOF) avant il a fini D’exécuter le code, car l’utilisateur n’a entré aucune donnée d’entrée.,
lorsque Python atteint la condition EOF en même temps qu’il a exécuté tout le code sans lancer d’exceptions, ce qui est une façon pour Python de quitter « gracieusement. »
Detect script exit
Si nous voulons savoir quand un programme Python se termine sans lancer d’exception, nous pouvons utiliser le module intégré Pythonatexit
.
leatexit
gère tout ce que nous voulons que le programme fasse quand il se termine et est généralement utilisé pour nettoyer le programme avant la fin du processus du programme
pour expérimenter avec atexit, modifions notre entrée.,exemple py pour imprimer un message à la sortie du programme. Ouvrez le input.py
import atexitatexit.register(print,"Program exited successfully!")name=input("What"s your name?\n")print("Hi,",name,"!")
Tapez votre nom, et lorsque vous appuyez sur Entrée, vous devriez obtenir:
What"s your name?ExampleHi, Example !Program exited successfully!
remarquez comment le texte de sortie apparaît à la fin de la sortie, peu importe où nous plaçons l’appel atexit
, et commentatexit
appel avec un simpleprint()
, nous obtenons le texte de sortie où leprint()
tout a été fait, plutôt que l’endroit où le code se termine.,
Program exited successfully!What"s your name?ExampleHi, Example !
Gracieuse de sortie
Il y a plusieurs façons de quitter un Programme en Python qui n’implique pas de lancer une exception; la première était d’aller essayer quit()
Vous pouvez utiliser la commande bash echo $?
pour obtenir le code de sortie de l’interpréteur Python.,
nous pouvons également définir le type de code avec lequel l’interpréteur doit sortir en remettant quit()
un argument entier inférieur à 256
exit()
a la même fonctionnalité qu’un alias pour quit()
ni quit()
ni exit()
sont considérés comme une bonne pratique, car ils nécessitent tous deux le module site
, qui est destiné à être utilisé pour les interprètes interactifs et non dans les programmes., Pour nos programmes, nous devrions utiliser quelque chose comme sys.exit
notez que nous devons importer explicitement un module pour appeler exit()
, cela peut sembler ne pas être une amélioration, mais cela garantit que le module nécessaire est chargé car ce n’est pas une bonne hypothèse site
, Si nous ne voulons pas importer des modules supplémentaires, on peut faire ce qu’ exit()
, quit()
et sys.exit()
font en coulisses et raise SystemExit
la Sortie des messages d’erreur
Que faire si nous obtenons de mauvais commentaires d’un utilisateur?, Revenons à notre input.py
le script, et d’ajouter de la capacité à gérer la mauvaise qualité des entrées de l’utilisateurCTRL+D
pour passer d’un caractère EOF)
Le try
déclaration indique à Python d’essayer le code à l’intérieur de l’énoncé et de passer toute exception à la balise except
déclaration avant de quitter.
quitter sans erreur
que se passe-t-il si l’utilisateur remet une erreur à votre programme mais que vous ne voulez pas que votre code imprime une erreur ou fasse une sorte de gestion des erreurs pour minimiser l’impact utilisateur?,
nous pouvons ajouter une instruction finally
qui nous permet d’exécuter du code après avoir effectué notre gestion des erreurs dans catch
notez que l’utilisateur ne connaîtrait jamais un EOFError
S’est produit, cela peut être utilisé pour passer des valeurs par défaut en cas de mauvaise entrée ou d’arguments.,
quittez et libérez vos ressources
généralement, Python libère automatiquement toutes les ressources que vous avez appelées dans votre programme lorsqu’il se ferme, mais pour certains processus, il est recommandé d’enfermer certaines ressources limitées dans un blocwith
.
souvent, vous verrez cela dans les appelsopen()
, où ne pas libérer correctement le fichier pourrait causer des problèmes de lecture ou d’écriture dans le fichier plus tard.
Le with
bloc libère toutes les ressources réquisitionné en son sein., Si nous voulions plus explicite s’assurer que le fichier a été fermé, on peut utiliser la balise atexit.register()
commande à appeler close()
$ nano openfile.pyimport atexitfile=open("testfile.txt","w")file.write("let"s write some text!\n")atexit.register(file.close)
Si les ressources sont appelés sans l’aide d’un with
bloc, assurez-vous de libérer explicitement dans un atexit
commande.
quitter après un certain temps
Si nous craignons que notre programme ne se termine jamais normalement, nous pouvons utiliser le modulemultiprocessing
de Python pour nous assurer que notre programme se terminera.,
remarquez comment le processus n’a pas pu se terminer lorsque la fonction a été priée d’attendre 7 secondes mais a terminé et imprimé ce qu’elle était censée faire quand on lui a dit d’attendre 0 secondes!
quitter en utilisant une instruction return
Si nous avons une section de code que nous voulons utiliser pour terminer tout le programme, au lieu de laisser l’instructionbreak
continuer le code en dehors de la boucle, nous pouvons utiliser lereturn sys.exit()
pour quitter,
Quitter en plein milieu d’une fonction
Si nous ne voulons pas utiliser une instruction de retour, on peut encore appeler la balise sys.exit()
pour fermer notre programme et de fournir un return
dans une autre branche. Utilisons notre code de break.py encore.
la Sortie lorsque les conditions sont remplies
Si nous avons une boucle dans notre code Python et nous voulons nous assurer que le code de sortie s’il rencontre un problème, on peut utiliser un drapeau qu’il peut vérifier à la fin du programme.,
la Sortie sur la touche
Si nous voulons tenir notre programme dans la console jusqu’à ce qu’on appuie sur une touche, on peut utiliser un unbound input()
pour le fermer.
$ nano holdopen.pyinput("Press enter to continue")$ python3 holdopen.pyPress enter to continue$
Nous pouvons également passer CTRL+C
dans la console pour donner Python KeyboardInterrupt
caractère. Nous pouvons même gérer l’exceptionKeyboardInterrupt
comme nous l’avons déjà fait auparavant.,
quitter un programme multithread
quitter un programme multithread est légèrement plus impliqué, car un simple sys.exit()
est appelé à partir du thread qui ne quittera que le thread actuel., La façon « sale” de le faire est d’utiliser os._exit()
comme vous pouvez le voir, le programme n’a pas imprimé le reste du programme avant sa sortie, c’est pourquoi os._exit()
est généralement réservé Thread.join()
du thread principal est la méthode préférée pour terminer un programme multithread.,
à la Fin sans sys sortie
Sys.exit()
est qu’un des nombreux moyens que nous pouvons sortir de notre Python programmes, ce sys.exit()
n’est raise SystemExit
, on peut donc tout aussi bien utiliser en Python exception ou d’en créer un de nos propres!
On peut aussi utiliser la balise os._exit()
dire le système hôte pour tuer le python, mais ce n’est pas faire atexit
nettoyage.,
Sortie au moment d’exception
Si nous voulons sortir aucune exception, sans aucune manipulation, nous pouvons utiliser notre try-except
exécution du bloc os._exit()
.
Quitter et redémarrer
Enfin, nous allons explorer ce que nous faisons à la sortie de Python et de redémarrer le programme, ce qui est utile dans de nombreux cas.
j’espère que vous trouverez le tutoriel utile. Garder de revenir.
je vous Remercie.,
Fondateur de LikeGeeks. Je travaille comme administrateur système Linux depuis 2010. Je suis responsable de la maintenance, de la sécurisation et du dépannage des serveurs Linux pour plusieurs clients à travers le monde. J’adore écrire des scripts shell et Python pour automatiser mon travail.