Files for 2.1b1 distribution.
[python/dscho.git] / Lib / atexit.py
blob61f2458dd0a429b653ac3546a6053fe80e36c402
1 """
2 atexit.py - allow programmer to define multiple exit functions to be executed
3 upon normal program termination.
5 One public function, register, is defined.
6 """
8 __all__ = ["register"]
10 _exithandlers = []
11 def _run_exitfuncs():
12 """run any registered exit functions
14 _exithandlers is traversed in reverse order so functions are executed
15 last in, first out.
16 """
18 while _exithandlers:
19 func, targs, kargs = _exithandlers.pop()
20 apply(func, targs, kargs)
22 def register(func, *targs, **kargs):
23 """register a function to be executed upon normal program termination
25 func - function to be called at exit
26 targs - optional arguments to pass to func
27 kargs - optional keyword arguments to pass to func
28 """
29 _exithandlers.append((func, targs, kargs))
31 import sys
32 try:
33 x = sys.exitfunc
34 except AttributeError:
35 sys.exitfunc = _run_exitfuncs
36 else:
37 # if x isn't our own exit func executive, assume it's another
38 # registered exit function - append it to our list...
39 if x != _run_exitfuncs:
40 register(x)
41 del sys
43 if __name__ == "__main__":
44 def x1():
45 print "running x1"
46 def x2(n):
47 print "running x2(%s)" % `n`
48 def x3(n, kwd=None):
49 print "running x3(%s, kwd=%s)" % (`n`, `kwd`)
51 register(x1)
52 register(x2, 12)
53 register(x3, 5, "bar")
54 register(x3, "no kwd args")