blob: 74712ee04fda4a75161c5dca389e9af1bb1afa55 [file] [log] [blame]
Georg Brandl116aa622007-08-15 14:28:22 +00001
2:mod:`atexit` --- Exit handlers
3===============================
4
5.. module:: atexit
6 :synopsis: Register and execute cleanup functions.
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
10
Georg Brandl116aa622007-08-15 14:28:22 +000011The :mod:`atexit` module defines functions to register and unregister cleanup
12functions. Functions thus registered are automatically executed upon normal
13interpreter termination.
14
15Note: the functions registered via this module are not called when the program
16is killed by a signal, when a Python fatal internal error is detected, or when
17:func:`os._exit` is called.
18
19
Georg Brandlb868a662009-04-02 02:56:10 +000020.. function:: register(func, *args, **kargs)
Georg Brandl116aa622007-08-15 14:28:22 +000021
22 Register *func* as a function to be executed at termination. Any optional
23 arguments that are to be passed to *func* must be passed as arguments to
24 :func:`register`.
25
26 At normal program termination (for instance, if :func:`sys.exit` is called or
27 the main module's execution completes), all functions registered are called in
28 last in, first out order. The assumption is that lower level modules will
29 normally be imported before higher level modules and thus must be cleaned up
30 later.
31
32 If an exception is raised during execution of the exit handlers, a traceback is
33 printed (unless :exc:`SystemExit` is raised) and the exception information is
34 saved. After all exit handlers have had a chance to run the last exception to
35 be raised is re-raised.
36
Georg Brandl55ac8f02007-09-01 13:51:09 +000037 This function returns *func* which makes it possible to use it as a decorator
38 without binding the original name to ``None``.
Georg Brandl116aa622007-08-15 14:28:22 +000039
40
41.. function:: unregister(func)
42
43 Remove a function *func* from the list of functions to be run at interpreter-
44 shutdown. After calling :func:`unregister`, *func* is guaranteed not to be
45 called when the interpreter shuts down.
46
Georg Brandl116aa622007-08-15 14:28:22 +000047
48.. seealso::
49
50 Module :mod:`readline`
Georg Brandlb868a662009-04-02 02:56:10 +000051 Useful example of :mod:`atexit` to read and write :mod:`readline` history
52 files.
Georg Brandl116aa622007-08-15 14:28:22 +000053
54
55.. _atexit-example:
56
57:mod:`atexit` Example
58---------------------
59
60The following simple example demonstrates how a module can initialize a counter
61from a file when it is imported and save the counter's updated value
62automatically when the program terminates without relying on the application
63making an explicit call into this module at termination. ::
64
65 try:
66 _count = int(open("/tmp/counter").read())
67 except IOError:
68 _count = 0
69
70 def incrcounter(n):
71 global _count
72 _count = _count + n
73
74 def savecounter():
75 open("/tmp/counter", "w").write("%d" % _count)
76
77 import atexit
78 atexit.register(savecounter)
79
80Positional and keyword arguments may also be passed to :func:`register` to be
81passed along to the registered function when it is called::
82
83 def goodbye(name, adjective):
Georg Brandl6911e3c2007-09-04 07:15:32 +000084 print('Goodbye, %s, it was %s to meet you.' % (name, adjective))
Georg Brandl116aa622007-08-15 14:28:22 +000085
86 import atexit
87 atexit.register(goodbye, 'Donny', 'nice')
88
89 # or:
90 atexit.register(goodbye, adjective='nice', name='Donny')
91
Christian Heimesd8654cf2007-12-02 15:22:16 +000092Usage as a :term:`decorator`::
Georg Brandl116aa622007-08-15 14:28:22 +000093
94 import atexit
95
96 @atexit.register
97 def goodbye():
Georg Brandl6911e3c2007-09-04 07:15:32 +000098 print("You are now leaving the Python sector.")
Georg Brandl116aa622007-08-15 14:28:22 +000099
100This obviously only works with functions that don't take arguments.
101