Mis a jour le 2026-05-25, 14:10

module atexit pour actions en fin de programme.

le module atexit permet d'enregistrer des appels de fonctions à faire en sortie d'un programme pour faire le ménage :
  • pour utiliser le module, faire import atexit.
  • pour enregistrer une fonction avec des arguments à donner, faire : atexit.register(myFunc, 1, 2), la fonction myFunc étant définie par def myFunc(arg1, arg2).
  • on peut aussi enregistrer une fonction par : atexit.register(myFunc, 1, 2), la fonction myFunc étant définie par def myFunc(*arg), et arg reçoit alors le tuple des arguments.
  • on peut aussi enregistrer une fonction par : atexit.register(myFunc, a = 1, b = 2), la fonction myFunc étant définie par def myFunc(**arg), et arg reçoit alors le dictionnaire des arguments.
  • dans quelles situations les fonctions sont appelées :
    • en sortie "normale" de programme, y compris avec un sys.exit(1) par exemple.
    • si le programme se termine à cause d'un raise d'une exception.
    • si le programme se termine à cause d'une erreur python (fonction appelée non existante, ou évaluation de None + 1 par exemple).
    • si on fait un Ctrl-C pour interrompre le programme (SIGINT)
    • mais pas d'appel si on tue le programme par SIGTERM (kill -15) ou SIGKILL (kill -9).
  • les fonctions enregistrées sont appelées dans l'ordre inverse de l'enregistrement.
On peut appeler un handler pour faire une action quand le program reçoit un SIGTERM, avec le package signal, mais il faut utiliser une closure (pas de possibilité de passer un argument au handler :
import signal
fileName = 'monFichier'    
def terminate():
  os.remove(fileName)
signal.signal(signal.SIGTERM, terminate)
  
Par contre, impossible à utiliser avec un signal SIGKILL qui ne laisse aucune chance au program d'appeler quoi que ce soit.

Copyright python-simple.com
programmer en python, tutoriel python, graphes en python, Aymeric Duclert