mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 03:22:27 +00:00 
			
		
		
		
	module sections. Properly mark the name of the module in the content of the reference there.
		
			
				
	
	
		
			74 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			TeX
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			TeX
		
	
	
	
	
	
\section{\module{atexit} ---
 | 
						|
         Exit handlers}
 | 
						|
 | 
						|
\declaremodule{standard}{atexit}
 | 
						|
\moduleauthor{Skip Montanaro}{skip@mojam.com}
 | 
						|
\sectionauthor{Skip Montanaro}{skip@mojam.com}
 | 
						|
\modulesynopsis{Register and execute cleanup functions.}
 | 
						|
 | 
						|
\versionadded{2.0}
 | 
						|
 | 
						|
The \module{atexit} module defines a single function to register
 | 
						|
cleanup functions.  Functions thus registered are automatically
 | 
						|
executed upon normal interpreter termination.
 | 
						|
 | 
						|
Note: the functions registered via this module are not called when the program is killed by a
 | 
						|
signal, when a Python fatal internal error is detected, or when
 | 
						|
\function{os._exit()} is called.
 | 
						|
 | 
						|
This is an alternate interface to the functionality provided by the
 | 
						|
\code{sys.exitfunc} variable.
 | 
						|
\withsubitem{(in sys)}{\ttindex{exitfunc}}
 | 
						|
 | 
						|
Note: This module is unlikely to work correctly when used with other code
 | 
						|
that sets \code{sys.exitfunc}.  In particular, other core Python modules are
 | 
						|
free to use \module{atexit} without the programmer's knowledge.  Authors who
 | 
						|
use \code{sys.exitfunc} should convert their code to use
 | 
						|
\module{atexit} instead.  The simplest way to convert code that sets
 | 
						|
\code{sys.exitfunc} is to import \module{atexit} and register the function
 | 
						|
that had been bound to \code{sys.exitfunc}.
 | 
						|
 | 
						|
\begin{funcdesc}{register}{func\optional{, *args\optional{, **kargs}}}
 | 
						|
Register \var{func} as a function to be executed at termination.  Any
 | 
						|
optional arguments that are to be passed to \var{func} must be passed
 | 
						|
as arguments to \function{register()}.
 | 
						|
 | 
						|
At normal program termination (for instance, if
 | 
						|
\function{sys.exit()} is called or the main module's execution
 | 
						|
completes), all functions registered are called in last in, first out
 | 
						|
order.  The assumption is that lower level modules will normally be
 | 
						|
imported before higher level modules and thus must be cleaned up
 | 
						|
later.
 | 
						|
\end{funcdesc}
 | 
						|
 | 
						|
 | 
						|
\begin{seealso}
 | 
						|
  \seemodule{readline}{Useful example of \module{atexit} to read and
 | 
						|
                       write \refmodule{readline} history files.}
 | 
						|
\end{seealso}
 | 
						|
 | 
						|
 | 
						|
\subsection{\module{atexit} Example \label{atexit-example}}
 | 
						|
 | 
						|
The following simple example demonstrates how a module can initialize
 | 
						|
a counter from a file when it is imported and save the counter's
 | 
						|
updated value automatically when the program terminates without
 | 
						|
relying on the application making an explicit call into this module at
 | 
						|
termination.
 | 
						|
 | 
						|
\begin{verbatim}
 | 
						|
try:
 | 
						|
    _count = int(open("/tmp/counter").read())
 | 
						|
except IOError:
 | 
						|
    _count = 0
 | 
						|
 | 
						|
def incrcounter(n):
 | 
						|
    global _count
 | 
						|
    _count = _count + n
 | 
						|
 | 
						|
def savecounter():
 | 
						|
    open("/tmp/counter", "w").write("%d" % _count)
 | 
						|
 | 
						|
import atexit
 | 
						|
atexit.register(savecounter)
 | 
						|
\end{verbatim}
 |