Магический вывод трубки 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