gpt4 book ai didi

python - 如何用我自己的横幅调用 `IPython.start_ipython()`?

转载 作者:行者123 更新时间:2023-11-28 17:34:45 24 4
gpt4 key购买 nike

什么有效

调用IPython.embed()时, 一个可以通过 banner1 , banner2header自定义在交互式 session 之前出现的消息,如下所示:

import IPython
IPython.embed(banner2="*** Welcome! ***")

结果:

Python 2.7.6 (default, Jun 22 2015, 17:58:13) 
Type "copyright", "credits" or "license" for more information.

IPython 3.2.1 -- An enhanced Interactive Python.
? -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help -> Python's own help system.
object? -> Details about 'object', use 'object??' for extra details.

*** Welcome! ***
In [1]:

什么不起作用

使用 IPython.start_ipython() 时, 而不是 IPython.embed()在上面的调用中,我找不到任何会影响横幅的参数,除了 display_banner=False。完全省略它。

我能做的最好的就是破坏 argv , 更改配置,例如:

import sys, IPython
argv = (
sys.argv[1:] +
['--TerminalInteractiveShell.banner2=*** Welcome! ***']
)
IPython.start_ipython(argv=argv)

这是可用的,但看起来做作。

我想我也可以继承自 IPython.ipapp.TerminalInteractiveShell在我的代码中覆盖 .banner1.banner2 ,但这感觉有点矫枉过正。

问题

我想要的只是一种通过banner2的方法进入IPython.start_ipython() .

有没有更直接的方法?

更多技术细节

用例是创建一个脚本,该脚本使用一些预定义的变量启动 IPython 控制台 session ,以控制具有相当复杂设置的应用程序。并解释如何使用该设置。

类似于:

import sys, myapp, IPython

explain_usage_of_session = """
You can use session.blah() to frobnicate the foobaringo
"""

session = myapp.MyComplicatedSessionFactory(including=
configuration.params(from_file))

sys.exit(
IPython.start_ipython(user_ns=dict(session=session),
banner2=explain_usage_of_session)
)

约束

更具体的用例是此脚本由 buildout 自动生成的 zc.recipe.egg , 它位于 IPython.start_ipython使用 IPython [console_scripts]入口点,所以我实际上可以传递到脚本中的自定义量有限,我不能使用 IPython.embed()直接。

super 骗子加上特定用例是我实际上使用的是 anybox.recipe.odoo , 它包装了 zc.recipe.egg .最终结果是我对脚本的构建方式更加有限。

基本上我可以设置传递给 IPython.start_ipython() 的参数用 arguments 调用zc.recipe.egg 的选项,仅此而已。特别是,我不能使用 initialization zc.recipe.egg 的选项.

而且我宁愿不必编写自己的入口点。

最佳答案

作为@Thomas K说,你可以创建一个 IPython.Config 实例并设置 banner2:

from IPython import start_ipython
from traitlets.config.loader import Config

c = Config()
c.TerminalInteractiveShell.banner2 = '*** Welcome! ***'

start_ipython(config=c)

结果:

$ python start_with_banner.py
Python 2.7.11+ (default, Mar 30 2016, 21:00:42)
Type "copyright", "credits" or "license" for more information.

IPython 2.4.1 -- An enhanced Interactive Python.
? -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help -> Python's own help system.
object? -> Details about 'object', use 'object??' for extra details.

*** Welcome! ***
In [1]:

Ftr:Config 构造函数接受kwargs:

c = Config(TerminalInteractiveShell={'banner2': '*** Welcome! ***'})

嗯,

更新:对于 ipython 5.x 之前的版本,您可以直接from IPython import Config

关于python - 如何用我自己的横幅调用 `IPython.start_ipython()`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31613804/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com