在ipython解释器中执行文件

7
我正在尝试在ipython解释器中运行一个文件。 文档将其描述为仅需在shell中输入ipython file.py或者在解释器内部输入%run file.py即可解决。但是,我想读取一个包含ipython“系统shell”命令的文件。这里有一个例子:
files= !ls
print files

对于这种命令,按照上述方式调用解释器会导致 SyntaxError,就好像它是由 /usr/bin/python 执行一样。
是否可以在系统 shell 中运行文件,并像在 ipython shell 解释器内部执行一样?
3个回答

5
看起来您可以通过将文件命名为 .ipy 扩展名来实现这一点。
sam@blackbird-debian:~
$ cat tmp.ipy
me = !whoami
print me
sam@blackbird-debian:~
$ ipython tmp.ipy
['sam']

4

我猜您想在已经运行的IPython会话中完成此操作。可能有更为简单的方法,但我现在能想到的是:

get_ipython().shell.run_cell(open('path/to/commands').read())

另一个疯狂的想法是将IPython作为EDITOR=cat ipython启动。现在,您可以通过以下方式从文件加载命令:
%edit -r path/to/commands

虽然对于您的用例可能需要一种真正的魔法。


或者您可以以非交互方式执行相同的操作(添加-i以进入交互模式):

ipython -c 'get_ipython().shell.run_cell(open("path/to/commands").read())'

1
Hoa,第二个方法很有创意。不过我想在命令行中运行一个文件,可能我表达不够清楚(我会编辑一下)。 - loopbackbee
我在你的第一个例子中不得不省略.shell。之后它完美地工作了。 - We Are All Monica

0

根据你想要做的具体事情,运行以下内容可能已经足够了

ipython < file

从bash中。也就是说,只需将标准输入重定向到ipython,使得ipython认为它接收到的命令来自键盘而不是文件。

1
例如,抛出异常后,这不会盲目执行吗? - loopbackbee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接