2016-09-14 64 views
2

在我的項目manage,我嵌入IPython的有:覆蓋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控制檯,但離開IPython的我可以只輸入exitexit()或按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。從這個文件,它看起來像您可以在IPython extension定義退出掛鉤,並與IPython的實例的set_hook方法進行註冊:

# 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

+0

註冊一個擴展的方法工作,但我發現,shutdown_hook已過時,我要去把解決方案,前面回答 –

+0

@rochacbruno:呵呵。這不在我發現的文檔中,但Google建議你是對的。我想到shutdown_hook是爲了在IPython實例關閉時想做某些事情,但Python解釋器本身可能仍然保持活動狀態。 – user2357112