blob: c2c058e474cbdcde2a3ef1fdcde33ebaa8539fad [file] [log] [blame]
Georg Brandl116aa622007-08-15 14:28:22 +00001:mod:`atexit` --- Exit handlers
2===============================
3
4.. module:: atexit
5 :synopsis: Register and execute cleanup functions.
Terry Jan Reedyfa089b92016-06-11 15:02:54 -04006
Christian Heimes895627f2007-12-08 17:28:33 +00007.. moduleauthor:: Skip Montanaro <skip@pobox.com>
8.. sectionauthor:: Skip Montanaro <skip@pobox.com>
Georg Brandl116aa622007-08-15 14:28:22 +00009
Terry Jan Reedyfa089b92016-06-11 15:02:54 -040010--------------
Georg Brandl116aa622007-08-15 14:28:22 +000011
Georg Brandl116aa622007-08-15 14:28:22 +000012The :mod:`atexit` module defines functions to register and unregister cleanup
13functions. Functions thus registered are automatically executed upon normal
Larry Hastings11917092012-07-14 18:20:37 -070014interpreter termination. :mod:`atexit` runs these functions in the *reverse*
15order in which they were registered; if you register ``A``, ``B``, and ``C``,
16at interpreter termination time they will be run in the order ``C``, ``B``,
17``A``.
Georg Brandl116aa622007-08-15 14:28:22 +000018
Larry Hastings11917092012-07-14 18:20:37 -070019**Note:** The functions registered via this module are not called when the
20program is killed by a signal not handled by Python, when a Python fatal
21internal error is detected, or when :func:`os._exit` is called.
Georg Brandl116aa622007-08-15 14:28:22 +000022
Marcel Plch776407f2017-12-20 11:17:58 +010023.. versionchanged:: 3.7
24 When used with C-API subinterpreters, registered functions
25 are local to the interpreter they were registered in.
Georg Brandl116aa622007-08-15 14:28:22 +000026
Erik Brayd505a292017-11-16 17:48:52 +010027.. function:: register(func, *args, **kwargs)
Georg Brandl116aa622007-08-15 14:28:22 +000028
29 Register *func* as a function to be executed at termination. Any optional
30 arguments that are to be passed to *func* must be passed as arguments to
Éric Araujoccddc472012-02-15 17:07:49 +010031 :func:`register`. It is possible to register the same function and arguments
32 more than once.
Georg Brandl116aa622007-08-15 14:28:22 +000033
34 At normal program termination (for instance, if :func:`sys.exit` is called or
35 the main module's execution completes), all functions registered are called in
36 last in, first out order. The assumption is that lower level modules will
37 normally be imported before higher level modules and thus must be cleaned up
38 later.
39
40 If an exception is raised during execution of the exit handlers, a traceback is
41 printed (unless :exc:`SystemExit` is raised) and the exception information is
42 saved. After all exit handlers have had a chance to run the last exception to
43 be raised is re-raised.
44
Éric Araujoccddc472012-02-15 17:07:49 +010045 This function returns *func*, which makes it possible to use it as a
46 decorator.
Georg Brandl116aa622007-08-15 14:28:22 +000047
48
49.. function:: unregister(func)
50
Éric Araujoccddc472012-02-15 17:07:49 +010051 Remove *func* from the list of functions to be run at interpreter
Georg Brandl116aa622007-08-15 14:28:22 +000052 shutdown. After calling :func:`unregister`, *func* is guaranteed not to be
Éric Araujoccddc472012-02-15 17:07:49 +010053 called when the interpreter shuts down, even if it was registered more than
54 once. :func:`unregister` silently does nothing if *func* was not previously
55 registered.
Georg Brandl116aa622007-08-15 14:28:22 +000056
Georg Brandl116aa622007-08-15 14:28:22 +000057
58.. seealso::
59
60 Module :mod:`readline`
Georg Brandlb868a662009-04-02 02:56:10 +000061 Useful example of :mod:`atexit` to read and write :mod:`readline` history
62 files.
Georg Brandl116aa622007-08-15 14:28:22 +000063
64
65.. _atexit-example:
66
67:mod:`atexit` Example
68---------------------
69
70The following simple example demonstrates how a module can initialize a counter
71from a file when it is imported and save the counter's updated value
72automatically when the program terminates without relying on the application
73making an explicit call into this module at termination. ::
74
75 try:
Petri Lehtinen3c75a482013-02-23 19:34:15 +010076 with open("counterfile") as infile:
Éric Araujoe4f6a802011-03-12 15:56:09 +010077 _count = int(infile.read())
Antoine Pitrou62ab10a02011-10-12 20:10:51 +020078 except FileNotFoundError:
Georg Brandl116aa622007-08-15 14:28:22 +000079 _count = 0
80
81 def incrcounter(n):
82 global _count
83 _count = _count + n
84
85 def savecounter():
Petri Lehtinen3c75a482013-02-23 19:34:15 +010086 with open("counterfile", "w") as outfile:
Éric Araujoa3dd56b2011-03-11 17:42:48 +010087 outfile.write("%d" % _count)
Georg Brandl116aa622007-08-15 14:28:22 +000088
89 import atexit
90 atexit.register(savecounter)
91
92Positional and keyword arguments may also be passed to :func:`register` to be
93passed along to the registered function when it is called::
94
95 def goodbye(name, adjective):
Georg Brandl6911e3c2007-09-04 07:15:32 +000096 print('Goodbye, %s, it was %s to meet you.' % (name, adjective))
Georg Brandl116aa622007-08-15 14:28:22 +000097
98 import atexit
99 atexit.register(goodbye, 'Donny', 'nice')
100
101 # or:
102 atexit.register(goodbye, adjective='nice', name='Donny')
103
Christian Heimesd8654cf2007-12-02 15:22:16 +0000104Usage as a :term:`decorator`::
Georg Brandl116aa622007-08-15 14:28:22 +0000105
106 import atexit
107
108 @atexit.register
109 def goodbye():
Georg Brandl6911e3c2007-09-04 07:15:32 +0000110 print("You are now leaving the Python sector.")
Georg Brandl116aa622007-08-15 14:28:22 +0000111
Éric Araujoccddc472012-02-15 17:07:49 +0100112This only works with functions that can be called without arguments.