你可以指定在嵌入IPython后运行的命令吗?

时间:2015-01-12 22:06:06

标签: python ipython

调用IPython.embed()时,可以在嵌入发生后为其提供命令或魔术函数。

我想运行这样的东西

import IPython
IPython.embed(command='%pylab qt4')

我目前的解决方法是将命令字符串复制到剪贴板,生成一个后台线程,该线程发送键击%paste然后输入到当前窗口。这在linux上运行正常,但它非常hacky,我无法在Windows上运行它。看起来应该可以指定这个,但我从来没有理解IPython配置是如何工作的,或者嵌入的参数是用于什么的。

2 个答案:

答案 0 :(得分:2)

自IPython 4.0起,IPython.config软件包已被弃用。您应该改为从traitlets.config导入。

import IPython
from pkg_resources import parse_version # installed with setuptools

if parse_version(IPython.release.version) >= parse_version('4.0.0'):
    from traitlets.config import Config
else:
    import IPython.config
    from IPython.config import Config

c = Config()
c.InteractiveShellApp.exec_lines = [
    '%pylab qt4'
    "print('System Ready!')",
]
IPython.start_ipython(config=c)

答案 1 :(得分:1)

该文件指出IPython.start_ipython读取配置文件,而IPython.embed则不读取。考虑到这一点,让我们使用前者:

import IPython

c = IPython.Config()
c.InteractiveShellApp.exec_lines = [
    '%pylab qt4',
    "print 'System Ready!'",
]

IPython.start_ipython(config=c)

更新

我不确定是什么意思来保留当前的命名空间。如果你的意思是本地/全局变量:

IPython.start_ipython(config=c, user_ns=locals())   # Pass in local variables
IPython.start_ipython(config=c, user_ns=globals())  # Pass in global variables