Comment pouvez-vous avoir une fonction ou quelque chose qui sera exécuté avant que votre programme ne se termine? J'ai un script qui sera constamment exécuté en arrière-plan, et j'en ai besoin pour enregistrer des données dans un fichier avant qu'il ne se termine. Y a-t-il une manière standard de faire ceci?Faire quelque chose avant la sortie du programme
Répondre
Vérifiez le module atexit
:
http://docs.python.org/library/atexit.html
Par exemple, si je voulais imprimer un message lorsque ma demande résiliait:
import atexit
def exit_handler():
print 'My application is ending!'
atexit.register(exit_handler)
Soyez conscient que cela fonctionne très bien pour terminaison normale du script, mais il ne sera pas appelé dans tous les cas (par exemple, des erreurs internes fatales).
Y at-il un moyen de le faire où il sera appelé si vous appuyez sur Ctrl + C ou Ctrl + \? – RacecaR
Il sera appelé si vous appuyez sur Ctrl + C. Cela soulève simplement une exception KeyboardInterrupt. –
Oh, j'ai oublié ça. Et je suppose que rien de ce que vous pouvez faire ne sera exécuté si quelqu'un tue le processus python? – RacecaR
Si vous arrêtez le script en élevant un KeyboardInterrupt
(par exemple en appuyant sur Ctrl-C), vous pouvez l'attraper comme une exception standard. Vous pouvez également capturer SystemExit
de la même manière.
try:
...
except KeyboardInterrupt:
# clean up
raise
Je mentionne cela juste pour que vous sachiez à ce sujet; la «bonne» façon de le faire est le module atexit
mentionné ci-dessus.
Si vous voulez quelque chose à courir toujours, même en cas d'erreur, utilisez essayer: enfin: comme ça -
def main():
try:
execute_app()
finally:
handle_cleanup()
if __name__=='__main__':
main()
Si vous voulez gérer également des exceptions vous pouvez insérer une exception: avant la finalement:
Ne fonctionne pas lorsque SIGTERM se produit en raison de la destruction du processus. – ramu
Comment arrêtez-vous le script? – phimuemue
Le script ne devrait jamais s'arrêter, mais peut-être quelqu'un va tuer le processus ou appuyez sur Ctrl + \ ou quelque chose. – RacecaR