6

我正在尝试在 ipython 解释器中运行一个文件。文档使这听起来像ipython file.py在 shell 或%run file.py解释器本身中一样简单。但是,我想读取一个包含 ipython“系统外壳”命令的文件。这是一个例子:

files= !ls
print files

对于这种类型的命令,调用上述解释器会导致 SyntaxError,就好像它是由/usr/bin/python.

是否可以从系统 shell运行文件,就好像它在 ipython shell 解释器中执行一样?

4

3 回答 3

5

如果您使用 .ipy 扩展名命名您的文件,您似乎可以执行此操作。

sam@blackbird-debian:~
$ cat tmp.ipy
me = !whoami
print me
sam@blackbird-debian:~
$ ipython tmp.ipy
['sam']
于 2012-11-14T00:46:00.093 回答
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())'
于 2012-11-14T00:08:37.610 回答
0

根据您到底想要做什么,运行可能就足够了

ipython < file

来自 bash。也就是说,只需将标准输入从您的文件重定向到 ipython,以便 ipython 认为它获取的命令来自您的键盘。

于 2012-11-14T00:05:15.447 回答