| # Test the atexit module. |
| from test.test_support import TESTFN, vereq, is_jython |
| import atexit |
| from os import popen, unlink |
| import sys |
| |
| executable = sys.executable |
| if is_jython: |
| executable = "jython" |
| |
| input = """\ |
| import atexit |
| |
| def handler1(): |
| print "handler1" |
| |
| def handler2(*args, **kargs): |
| print "handler2", args, kargs |
| |
| atexit.register(handler1) |
| atexit.register(handler2) |
| atexit.register(handler2, 7, kw="abc") |
| """ |
| |
| fname = TESTFN + ".py" |
| f = file(fname, "w") |
| f.write(input) |
| f.close() |
| |
| p = popen("%s %s" % (executable, fname)) |
| output = p.read() |
| p.close() |
| vereq(output, """\ |
| handler2 (7,) {'kw': 'abc'} |
| handler2 () {} |
| handler1 |
| """) |
| |
| input = """\ |
| def direct(): |
| print "direct exit" |
| |
| import sys |
| sys.exitfunc = direct |
| |
| # Make sure atexit doesn't drop |
| def indirect(): |
| print "indirect exit" |
| |
| import atexit |
| atexit.register(indirect) |
| """ |
| |
| f = file(fname, "w") |
| f.write(input) |
| f.close() |
| |
| p = popen("%s %s" % (executable, fname)) |
| output = p.read() |
| p.close() |
| vereq(output, """\ |
| indirect exit |
| direct exit |
| """) |
| |
| unlink(fname) |