Магический вывод трубки Ipython для переменной?

Я хочу запустить bash script в моем ноутбуке ipython и сохранить вывод в виде строки в переменной python для дальнейших манипуляций. В принципе, я хочу передать результат магии bash переменной, Например, вывод чего-то вроде этого:

%%bash
some_command [options] foo bar

Ответы

Ответ 1

Как насчет этого:

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

вместо магии %%bash? Использование символа ! выполняет следующую команду в качестве команды оболочки, и все результаты хранятся в myvar. Для запуска нескольких команд и сбора вывода всех из них просто создайте скопированную оболочку script.

Ответ 2

Для полноты, если вы все равно хотите использовать магию ячеек %%bash, вы можете передать флаги --out и --err, чтобы перенаправить выходы из stdout и stderr в переменную по вашему выбору.

Из doucumentation:

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

будет хранить выходы в переменных output и error, чтобы:

print(error)
print(output)

выведет на консоль python:

hello, stderr
hi, stdout

Ответ 3

Обратите внимание на разницу в типе переменной между ответами @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