atexit.py (1147B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\carbon\common\stdlib\atexit.py 2 __all__ = ['register'] 3 import sys 4 _exithandlers = [] 5 6 def _run_exitfuncs(): 7 exc_info = None 8 while _exithandlers: 9 func, targs, kargs = _exithandlers.pop() 10 try: 11 func(*targs, **kargs) 12 except SystemExit: 13 exc_info = sys.exc_info() 14 except: 15 import traceback 16 print >> sys.stderr, 'Error in atexit._run_exitfuncs:' 17 traceback.print_exc() 18 exc_info = sys.exc_info() 19 20 if exc_info is not None: 21 raise exc_info[0], exc_info[1], exc_info[2] 22 23 24 def register(func, *targs, **kargs): 25 _exithandlers.append((func, targs, kargs)) 26 return func 27 28 29 if hasattr(sys, 'exitfunc'): 30 register(sys.exitfunc) 31 sys.exitfunc = _run_exitfuncs 32 if __name__ == '__main__': 33 34 def x1(): 35 print 'running x1' 36 37 38 def x2(n): 39 print 'running x2(%r)' % (n,) 40 41 42 def x3(n, kwd = None): 43 print 'running x3(%r, kwd=%r)' % (n, kwd) 44 45 46 register(x1) 47 register(x2, 12) 48 register(x3, 5, 'bar') 49 register(x3, 'no kwd args')