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.
12 """run any registered exit functions
14 _exithandlers is traversed in reverse order so functions are executed
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
29 _exithandlers
.append((func
, targs
, kargs
))
34 except AttributeError:
35 sys
.exitfunc
= _run_exitfuncs
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
:
43 if __name__
== "__main__":
47 print "running x2(%s)" % `n`
49 print "running x3(%s, kwd=%s)" % (`n`
, `kwd`
)
53 register(x3
, 5, "bar")
54 register(x3
, "no kwd args")