首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >覆盖ipython出口函数-或在其中添加挂钩

覆盖ipython出口函数-或在其中添加挂钩
EN

Stack Overflow用户
提问于 2016-09-15 05:16:04
回答 2查看 1.2K关注 0票数 4

在我的项目manage中,我嵌入了iPython:

代码语言:javascript
代码运行次数:0
运行
复制
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命令。

假设我有一个函数。

代码语言:javascript
代码运行次数:0
运行
复制
def teardown_my_shell():
    # things I want to happen when iPython exits

如何注册要在exit时执行函数,甚至如何让exit执行该函数?

注意:我试图通过user_ns={'exit': teardown_my_shell},但不起作用。

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-15 11:58:37

首先感谢@user2357112,我学会了如何创建扩展和注册钩子,但我发现shutdown_hook已被弃用。

正确的方法很简单。

代码语言:javascript
代码运行次数:0
运行
复制
import atexit

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

atexit.register(teardown_my_shell)
票数 5
EN

Stack Overflow用户

发布于 2016-09-15 05:29:02

在谷歌上搜索IPython exit hook就会找到IPython.core.hooks。从该文档中可以看出,您可以在IPython extension中定义一个退出挂钩,并使用IPython实例的set_hook方法注册它:

代码语言:javascript
代码运行次数:0
运行
复制
# 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中。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39499748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档