34

我想在我的 ipython Notebook 中运行一个 bash 脚本,并将输出作为字符串保存在 python 变量中以供进一步操作。基本上我想将 bash 魔法的输出通过管道传递给一个变量,例如这样的输出:

%%bash
some_command [options] foo bar
4

3 回答 3

59

如何使用这个:

myvar = !some_command --option1 --option2 foo bar

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

于 2013-12-20T13:04:02.927 回答
23

为了完整起见,如果您仍想使用%%bash单元魔法,您可以传递--outand--err标志以将输出从 stdout 和 stderr 重定向到您选择的变量。

文档

%%bash --out output --err error
echo "hi, stdout"
echo "hello, stderr" >&2

将输出存储在变量中outputerror以便:

print(error)
print(output)

将打印到 python 控制台:

hello, stderr
hi, stdout
于 2014-07-16T08:38:54.637 回答
7

SList请注意 @MattDMo ( ) 和 @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
于 2016-09-30T00:49:05.143 回答