summaryrefslogtreecommitdiff
path: root/sys/src/cmd/python/Doc/lib/libatexit.tex
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@localhost>2011-05-03 11:25:13 +0000
committercinap_lenrek <cinap_lenrek@localhost>2011-05-03 11:25:13 +0000
commit458120dd40db6b4df55a4e96b650e16798ef06a0 (patch)
tree8f82685be24fef97e715c6f5ca4c68d34d5074ee /sys/src/cmd/python/Doc/lib/libatexit.tex
parent3a742c699f6806c1145aea5149bf15de15a0afd7 (diff)
add hg and python
Diffstat (limited to 'sys/src/cmd/python/Doc/lib/libatexit.tex')
-rw-r--r--sys/src/cmd/python/Doc/lib/libatexit.tex94
1 files changed, 94 insertions, 0 deletions
diff --git a/sys/src/cmd/python/Doc/lib/libatexit.tex b/sys/src/cmd/python/Doc/lib/libatexit.tex
new file mode 100644
index 000000000..33dc7ddf8
--- /dev/null
+++ b/sys/src/cmd/python/Doc/lib/libatexit.tex
@@ -0,0 +1,94 @@
+\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.
+
+If an exception is raised during execution of the exit handlers, a
+traceback is printed (unless \exception{SystemExit} is raised) and the
+exception information is saved. After all exit handlers have had a
+chance to run the last exception to be raised is re-raised.
+\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}
+
+Positional and keyword arguments may also be passed to
+\function{register()} to be passed along to the registered function
+when it is called:
+
+\begin{verbatim}
+def goodbye(name, adjective):
+ print 'Goodbye, %s, it was %s to meet you.' % (name, adjective)
+
+import atexit
+atexit.register(goodbye, 'Donny', 'nice')
+
+# or:
+atexit.register(goodbye, adjective='nice', name='Donny')
+\end{verbatim}