我正在尝试在ipython解释器中运行一个文件。
该文档使声音与shell中的ipython file.py
或解释器本身内的%run file.py
一样简单。但是,我想读取包含ipython“系统shell”命令的文件。这是一个例子:
files= !ls
print files
对于这种类型的命令,如上所述调用解释器会导致SyntaxError,就像它由/usr/bin/python
执行一样。
是否可以从系统shell 运行文件,就像它在ipython shell解释器中执行一样?
答案 0 :(得分:5)
如果您使用.ipy扩展名命名文件,看起来就可以这样做。
sam@blackbird-debian:~
$ cat tmp.ipy
me = !whoami
print me
sam@blackbird-debian:~
$ ipython tmp.ipy
['sam']
答案 1 :(得分: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())'
答案 2 :(得分:0)
根据您想要做什么,运行
可能就足够了ipython < file
来自bash的也就是说,只需将标准输入从您的文件重定向到ipython,以便ipython认为它所获得的命令来自您的键盘。