web-dev-qa-db-fra.com

Faire quelque chose avant de quitter le programme

Comment pouvez-vous avoir une fonction ou quelque chose qui sera exécutée avant la fermeture de votre programme? J'ai un script qui s'exécutera constamment en arrière-plan et j'en ai besoin pour enregistrer des données dans un fichier avant qu'il ne se termine. Existe-t-il une manière standard de procéder?

73
RacecaR

Découvrez le module atexit:

http://docs.python.org/library/atexit.html

Par exemple, si je voulais imprimer un message à la fin de ma candidature:

import atexit

def exit_handler():
    print 'My application is ending!'

atexit.register(exit_handler)

Sachez simplement que cela fonctionne très bien pour la terminaison normale du script, mais il ne sera pas appelé dans tous les cas (par exemple, des erreurs internes fatales).

118

Si vous voulez que quelque chose s'exécute toujours, même en cas d'erreur, utilisez try: finally: comme ceci -

def main():
    try:
        execute_app()
    finally:
        handle_cleanup()

if __name__=='__main__':
    main()

Si vous souhaitez également gérer les exceptions, vous pouvez insérer un exception: avant le finalement:

24
Brian C. Lane

Si vous arrêtez le script en augmentant un KeyboardInterrupt (par exemple en appuyant sur Ctrl-C), vous pouvez intercepter cela comme une exception standard. Vous pouvez également attraper SystemExit de la même manière.

try:
    ...
except KeyboardInterrupt:
    # clean up
    raise

Je le mentionne juste pour que vous le sachiez; la "bonne" façon de procéder est le module atexit mentionné ci-dessus.

13
Katriel