In my project manage, I am embedding iPython with:
from IPython import start_ipython
from traitlets.config import Config
c = Config()
c.TerminalInteractiveShell.banner2 = "Welcome to my shell"
c.InteractiveShellApp.extensions = ['autoreload']
c.InteractiveShellApp.exec_lines = ['%autoreload 2']
start_ipython(argv=[], user_ns={}, config=c)
It works well and opens my iPython console, but to leave ipython I can just type exit
or exit()
or press ctrl+D
.
What I want to do is to add an exit hook
or replace that exit
command with something else.
Lets say I have a function.
def teardown_my_shell():
# things I want to happen when iPython exits
How do I register that function to be executed when I exit
or even how to make exit
to execute that function?
NOTE: I tried to pass user_ns={'exit': teardown_my_shell}
and doesn't work.
Thanks.
First thanks to @user2357112, I learned how to create an extension and register a hook, but I figured out that shutdown_hook
is deprecated.
The right way is simply.
import atexit
def teardown_my_shell():
# things I want to happen when iPython exits
atexit.register(teardown_my_shell)
Googling IPython exit hook turns up IPython.core.hooks
. From that documentation, it looks like you can define an exit hook in an IPython extension and register it with the IPython instance's set_hook
method:
# whateveryoucallyourextension.py
import IPython.core.error
def shutdown_hook(ipython):
do_whatever()
raise IPython.core.error.TryNext
def load_ipython_extension(ipython)
ipython.set_hook('shutdown_hook', shutdown_hook)
You'll have to add the extension to your c.InteractiveShellApp.extensions
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With