2016-09-14 8 views
2

manageが、私はiPythonを埋め込むています:exit関数ipythonオーバーライド私のプロジェクトで、またはそれにフックを追加

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) 

それはうまく機能し、私のiPythonコンソールを開きますが、私はちょうどexitを入力することができますipython残すためにまたはexit()を入力するか、ctrl+Dを押します。

私がしたいことは、exit hookを追加するか、そのexitコマンドを他のものに置き換えることです。

私は機能があると言います。

def teardown_my_shell(): 
    # things I want to happen when iPython exits 

どのように私はその機能を実行するためにexitを作るためにどのようにするとき、私exitあるいは実行されるように、その関数を登録できますか?

注:user_ns={'exit': teardown_my_shell}を渡そうとしましたが動作しません。

ありがとうございました。

答えて

3

@ user2357112の最初のおかげで、私はエクステンションを作成してフックを登録する方法を学びましたが、shutdown_hookは廃止されました。

正しい方法は簡単です。

import atexit 

def teardown_my_shell(): 
    # things I want to happen when iPython exits 

atexit.register(teardown_my_shell) 
2

グーグルIPython exit hookは、IPython.core.hooksとなります。

# 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) 

あなたはあなたのc.InteractiveShellApp.extensionsに拡張子を追加する必要があります:あなたはIPython extensionでexitフックを定義し、IPythonインスタンスのset_hook方法でそれを登録することができますようにその文書からは、それが見えます。

+0

拡張工事を登録する方法が、私はshutdown_hookは廃止されることを見出し、私はanwer –

+0

@rochacbrunoのような溶液を入れてやっています:えっ。それは私が見つけたドキュメントにはなかったが、Googleはあなたが正しいと示唆している。 shutdown_hookは、IPythonインスタンスがシャットダウンしているときに何かしたいときに使用すると考えられましたが、Pythonインタプリタ自体はまだアクティブのままです。 – user2357112

関連する問題