Bash IPython 脚本中的细胞魔法

Bash cell magic in IPython script

这是我第一次 post SO,所以如果问题没有明确定义,请告诉我。我有一个脚本 process.ipy,我在其中尝试按如下方式实现细胞魔法,

#!/usr/bin/env ipython

%%bash
ls

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

$ ipython process.ipy                                                                                                 
File "<ipython-input-1-f108be8d32f2>", line 3
  %%bash
  ^
SyntaxError: invalid syntax

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

In [1]: %%bash
   ...: ls
   ...: 
process.ipy

更令人困惑的是,单行版本在脚本中有效,

#!/usr/bin/env ipython

!ls

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

您不需要顶部的 #!/usr/bin/env ipython 行。 单元格魔法应该在单元格的第一行。

只需尝试以下操作,它应该会起作用

%%bash
ls

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

%%bash
ls

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

更长的答案:它们可以在脚本中调用,但只能使用库调用,而不是 How to run an IPython magic from a script (or timing a Python script) 中描述的 %% 符号。请注意,该机制是 IPython 版本相关的。