嵌入到IPython后,你能指定一个命令到运行吗?

Can you specify a command to run after you embed into IPython?

当调用 IPython.embed() 时,是否可以在嵌入发生后向 运行 提供命令或魔法函数。

我想要运行这样的东西

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

我目前的解决方法是将命令字符串复制到剪贴板,生成一个后台线程,发送击键 %paste 然后回车到当前 window。这在 linux 上工作正常,但它非常 hacky,我无法让它在 Windows 上工作得很好。似乎应该可以指定这一点,但我从来没有掌握 IPython 配置是如何工作的,或者嵌入的参数是用来做什么的。

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

import IPython

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

IPython.start_ipython(config=c)

更新

我不确定保留当前命名空间是什么意思。如果你的意思是 local/global 个变量:

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

IPython.config 包自 IPython 4.0 以来已被弃用。您应该改为从 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)