Home | History | Annotate | Download | only in library
      1 :mod:`atexit` --- Exit handlers
      2 ===============================
      3 
      4 .. module:: atexit
      5    :synopsis: Register and execute cleanup functions.
      6 .. moduleauthor:: Skip Montanaro <skip (a] pobox.com>
      7 .. sectionauthor:: Skip Montanaro <skip (a] pobox.com>
      8 
      9 
     10 .. versionadded:: 2.0
     11 
     12 **Source code:** :source:`Lib/atexit.py`
     13 
     14 --------------
     15 
     16 The :mod:`atexit` module defines a single function to register cleanup
     17 functions.  Functions thus registered are automatically executed upon normal
     18 interpreter termination.  :mod:`atexit` runs these functions in the *reverse*
     19 order in which they were registered; if you register ``A``, ``B``, and ``C``,
     20 at interpreter termination time they will be run in the order ``C``, ``B``,
     21 ``A``.
     22 
     23 **Note:** The functions registered via this module are not called when the
     24 program is killed by a signal not handled by Python, when a Python fatal
     25 internal error is detected, or when :func:`os._exit` is called.
     26 
     27 .. index:: single: exitfunc (in sys)
     28 
     29 This is an alternate interface to the functionality provided by the
     30 :func:`sys.exitfunc` variable.
     31 
     32 Note: This module is unlikely to work correctly when used with other code that
     33 sets ``sys.exitfunc``.  In particular, other core Python modules are free to use
     34 :mod:`atexit` without the programmer's knowledge.  Authors who use
     35 ``sys.exitfunc`` should convert their code to use :mod:`atexit` instead.  The
     36 simplest way to convert code that sets ``sys.exitfunc`` is to import
     37 :mod:`atexit` and register the function that had been bound to ``sys.exitfunc``.
     38 
     39 
     40 .. function:: register(func[, *args[, **kargs]])
     41 
     42    Register *func* as a function to be executed at termination.  Any optional
     43    arguments that are to be passed to *func* must be passed as arguments to
     44    :func:`register`.  It is possible to register the same function and arguments
     45    more than once.
     46 
     47    At normal program termination (for instance, if :func:`sys.exit` is called or
     48    the main module's execution completes), all functions registered are called in
     49    last in, first out order.  The assumption is that lower level modules will
     50    normally be imported before higher level modules and thus must be cleaned up
     51    later.
     52 
     53    If an exception is raised during execution of the exit handlers, a traceback is
     54    printed (unless :exc:`SystemExit` is raised) and the exception information is
     55    saved.  After all exit handlers have had a chance to run the last exception to
     56    be raised is re-raised.
     57 
     58    .. versionchanged:: 2.6
     59       This function now returns *func*, which makes it possible to use it as a
     60       decorator.
     61 
     62 
     63 .. seealso::
     64 
     65    Module :mod:`readline`
     66       Useful example of :mod:`atexit` to read and write :mod:`readline` history files.
     67 
     68 
     69 .. _atexit-example:
     70 
     71 :mod:`atexit` Example
     72 ---------------------
     73 
     74 The following simple example demonstrates how a module can initialize a counter
     75 from a file when it is imported and save the counter's updated value
     76 automatically when the program terminates without relying on the application
     77 making an explicit call into this module at termination. ::
     78 
     79    try:
     80        _count = int(open("counter").read())
     81    except IOError:
     82        _count = 0
     83 
     84    def incrcounter(n):
     85        global _count
     86        _count = _count + n
     87 
     88    def savecounter():
     89        open("counter", "w").write("%d" % _count)
     90 
     91    import atexit
     92    atexit.register(savecounter)
     93 
     94 Positional and keyword arguments may also be passed to :func:`register` to be
     95 passed along to the registered function when it is called::
     96 
     97    def goodbye(name, adjective):
     98        print 'Goodbye, %s, it was %s to meet you.' % (name, adjective)
     99 
    100    import atexit
    101    atexit.register(goodbye, 'Donny', 'nice')
    102 
    103    # or:
    104    atexit.register(goodbye, adjective='nice', name='Donny')
    105 
    106 Usage as a :term:`decorator`::
    107 
    108    import atexit
    109 
    110    @atexit.register
    111    def goodbye():
    112        print "You are now leaving the Python sector."
    113 
    114 This only works with functions that can be called without arguments.
    115