Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Override ipython exit function - or add hooks in to it

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.

like image 393
Bruno Rocha - rochacbruno Avatar asked Mar 11 '23 03:03

Bruno Rocha - rochacbruno


2 Answers

First thanks to @user2357112, I learned how to create an extension and register a hook, but I figured out that shutdown_hookis 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)
like image 182
Bruno Rocha - rochacbruno Avatar answered Mar 21 '23 01:03

Bruno Rocha - rochacbruno


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.

like image 35
user2357112 supports Monica Avatar answered Mar 21 '23 02:03

user2357112 supports Monica