调用IPython.embed()
时,可以通过banner1
,banner2
或header
来自定义在互动会话之前显示的消息,如下所示:
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控制台会话,以便通过相当复杂的设置来控制应用程序。并解释如何使用设置。
类似的东西:
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
的{{1}}自动生成此脚本,zc.recipe.egg
使用IPython.start_ipython
IPython
条目找到[console_scripts]
点,所以我在实际上可以传入脚本的自定义数量有限,而且我不能直接使用IPython.embed()
。
超级duper加上特定用例是我实际上使用anybox.recipe.odoo
,它包裹zc.recipe.egg
。最终的结果是我对脚本的构建方式更加有限。
基本上我可以像IPython.start_ipython()
的{{1}}选项一样设置传递到arguments
调用的参数,而不是其他任何内容。特别是,我无法使用zc.recipe.egg
的{{1}}选项。
我宁愿不必写自己的入口点。
答案 0 :(得分:2)
正如@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! ***'})
H个, DTK
更新:对于ipython 5.x之前的版本,您可以直接from IPython import Config
。