IPython 脚本中的 Bash 单元魔法

pac*_*nce 5 bash ipython

这是我关于 SO 的第一篇文章,所以如果问题没有明确定义,请告诉我。我有一个脚本process.ipy,其中我试图实现一个单元魔法,如下所示,

#!/usr/bin/env ipython

%%bash
ls
Run Code Online (Sandbox Code Playgroud)

当我在命令行(Ubuntu 和 zsh shell)上运行此命令时,出现以下错误,

$ ipython process.ipy                                                                                                 
File "<ipython-input-1-f108be8d32f2>", line 3
  %%bash
  ^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

但是,我可以在 ipython 会话中运行它,没有问题,

In [1]: %%bash
   ...: ls
   ...: 
process.ipy
Run Code Online (Sandbox Code Playgroud)

更令人困惑的是,单行版本在脚本中工作,

#!/usr/bin/env ipython

!ls
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?是不是设置不正确?

msw*_*msw 5

简短回答:魔术命令只能在 IPython 交互式会话中被理解,而不能在脚本中被理解。

更长的答案:它们可以在脚本中调用,但只能使用库调用,而不是如何从脚本运行 IPython 魔法(或对 Python 脚本计时)%%中描述的符号。请注意,该机制取决于 IPython 版本。


mag*_*udo 4

您不需要顶部的 #!/usr/bin/env ipython 行。错误 :

%%bash
ls
Run Code Online (Sandbox Code Playgroud)