Fred Drake | c19425d | 2000-06-28 15:07:31 +0000 | [diff] [blame] | 1 | \section{\module{atexit} --- |
| 2 | exit handlers} |
| 3 | |
| 4 | \declaremodule{standard}{atexit} |
| 5 | \moduleauthor{Skip Montanaro}{skip@mojam.com} |
| 6 | \sectionauthor{Skip Montanaro}{skip@mojam.com} |
| 7 | \modulesynopsis{Register and execute cleanup functions.} |
| 8 | |
Fred Drake | 30f76ff | 2000-06-30 16:06:19 +0000 | [diff] [blame] | 9 | \versionadded{2.0} |
Fred Drake | be93a83 | 2000-06-28 22:07:55 +0000 | [diff] [blame] | 10 | |
Fred Drake | c19425d | 2000-06-28 15:07:31 +0000 | [diff] [blame] | 11 | The \module{atexit} module defines a single function to register |
| 12 | cleanup functions. Functions thus registered are automatically |
| 13 | executed upon normal interpreter termination. |
| 14 | |
| 15 | Note: the functions registered via this module are not called when the program is killed by a |
| 16 | signal, when a Python fatal internal error is detected, or when |
| 17 | \code{os._exit()} is called. |
| 18 | |
| 19 | This is an alternate interface to the functionality provided by the |
| 20 | \code{sys.exitfunc} variable. |
| 21 | \withsubitem{(in sys)}{\ttindex{exitfunc}} |
| 22 | |
Skip Montanaro | 0915165 | 2000-07-05 23:11:26 +0000 | [diff] [blame] | 23 | Note: This module is unlikely to work correctly when used with other code |
| 24 | that sets \code{sys.exitfunc}. In particular, other core Python modules are |
| 25 | free to use \module{atexit} without the programmer's knowledge. Authors who |
| 26 | use \code{sys.exitfunc} should convert their code to use |
| 27 | \module{atexit} instead. The simplest way to convert code that sets |
| 28 | \code{sys.exitfunc} is to import \module{atexit} and register the function |
| 29 | that had been bound to \code{sys.exitfunc}. |
| 30 | |
Fred Drake | c19425d | 2000-06-28 15:07:31 +0000 | [diff] [blame] | 31 | \begin{funcdesc}{register}{func\optional{, *args\optional{, **kargs}}} |
| 32 | Register \var{func} as a function to be executed at termination. Any |
| 33 | optional arguments that are to be passed to \var{func} must be passed |
| 34 | as arguments to \function{register()}. |
| 35 | |
| 36 | At normal program termination (for instance, if |
| 37 | \function{sys.exit()} is called or the main module's execution |
| 38 | completes), all functions registered are called in last in, first out |
| 39 | order. The assumption is that lower level modules will normally be |
| 40 | imported before higher level modules and thus must be cleaned up |
| 41 | later. |
| 42 | \end{funcdesc} |
| 43 | |
| 44 | |
| 45 | \subsection{\module{atexit} Example \label{atexit-example}} |
| 46 | |
| 47 | The following simple example demonstrates how a module can initialize |
| 48 | a counter from a file when it is imported and save the counter's |
| 49 | updated value automatically when the program terminates without |
| 50 | relying on the application making an explicit call into this module at |
| 51 | termination. |
| 52 | |
| 53 | \begin{verbatim} |
| 54 | try: |
| 55 | _count = int(open("/tmp/counter").read()) |
| 56 | except IOError: |
| 57 | _count = 0 |
| 58 | |
| 59 | def incrcounter(n): |
| 60 | global _count |
| 61 | _count = _count + n |
| 62 | |
| 63 | def savecounter(): |
| 64 | open("/tmp/counter", "w").write("%d" % _count) |
| 65 | |
| 66 | import atexit |
| 67 | atexit.register(savecounter) |
| 68 | \end{verbatim} |
| 69 | |
Skip Montanaro | 63099f9 | 2000-07-06 03:26:39 +0000 | [diff] [blame^] | 70 | \begin{seealso} |
| 71 | \seemodule{readline}{useful example of atexit to read and write readline |
| 72 | history files} |
| 73 | \end{seealso} |