Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

atexit function is not called when exiting the script using Ipython

Tags:

ipython

atexit

Below is the code written in a script say test_atexit.py

def exit_function():
    print "I am in exit function"
import atexit
atexit.register(exit_function)
print "I am in main function"

When i run the function using python2.4 then exit_function is being called

$python2.4 test_atexit.py  
I am in main function  
I am in exit function

When i run the same using ipython then exit_function is not being called

$ ipython  
In [1]: %run test_atexit.py  
I am in main function  
In [2]: 

why exit_function is not called when running script using Ipython and how can i make ipython to call exit_function

like image 329
viky Avatar asked Feb 10 '26 19:02

viky


1 Answers

atexit functions are called when the Python interpreter exits, not when your script finishes. When you %run something in IPython, the interpreter is still running until you quit IPython. When you do that, you should see the output from your exit_function().

Possibly what you want is a try/finally, which ensures that the finally code is run after the try block, even if an exception occurs:

try:
    print("Doing things...")
    raise Exception("Something went wrong!")
finally:
    print("But this will still happen.")

If you really need to make atexit functions run, then you can call atexit._run_exitfuncs. However, this is undocumented, and it may do unexpected things, because anything can register atexit functions - IPython itself registers half a dozen, so you're likely to break things if you do it in IPython.

(Also, Python 2.4? For the sanity of developers everywhere, if it's possible to upgrade, do so ;-) )

like image 64
Thomas K Avatar answered Feb 15 '26 07:02

Thomas K



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!