管道Ipython魔术输出到变量?

Gio*_*elm 23 python ipython python-2.7 ipython-notebook ipython-magic

我想在我的ipython Notebook中运行一个bash脚本,并将输出保存为python变量中的字符串,以便进一步操作.基本上我想将bash魔法的输出传递给变量,例如输出如下:

%%bash
some_command [options] foo bar
Run Code Online (Sandbox Code Playgroud)

Mat*_*DMo 34

怎么样使用这个:

myvar = !some_command --option1 --option2 foo bar
Run Code Online (Sandbox Code Playgroud)

而不是%%bash魔术?使用该!符号将以下命令作为shell命令运行,结果全部存储在其中myvar.要运行多个命令并收集所有命令的输出,只需将快速shell脚本放在一起即可.

  • 是否可以区分 stdout 和 stderr? (4认同)

oLa*_*Las 16

为了完整性,如果您仍想使用%%bash单元格魔法,则可以传递--out--err标记以将输出从stdout和stderr重定向到您选择的变量.

doucumentation:

%%bash --out output --err error
echo "hi, stdout"
echo "hello, stderr" >&2
Run Code Online (Sandbox Code Playgroud)

将输出存储在变量中output,error以便:

print(error)
print(output)
Run Code Online (Sandbox Code Playgroud)

将打印到python控制台:

hello, stderr
hi, stdout
Run Code Online (Sandbox Code Playgroud)


Azi*_*lto 6

请注意@MattDMo ( SList) 和@oLas ( str) 答案之间变量类型的差异:

In [1]: output = !whoami

In [2]: type(output)
Out[2]: IPython.utils.text.SList

In [3]: %%bash --out output
   ...: whoami

In [4]: type(output)
Out[4]: str
Run Code Online (Sandbox Code Playgroud)