Подтвердить что ты не робот

Могу ли я получить доступ к переменным python в ячейке `%% bash` или `%% script` ipython?

Есть ли способ доступа к переменным в текущем ядре python из %%bash или другой ячейки %%script?

Возможно, в качестве аргументов командной строки или переменных среды?

4b9b3361

Ответ 1

Переменные Python могут быть доступны в первой строке ячейки %%bash или %%script и поэтому могут передаваться как параметры командной строки в script. Например, с помощью bash вы можете сделать это:

%%bash -s "$myPythonVar" "$myOtherVar"
echo "This bash script knows about $1 and $2"

Параметр командной строки -s позволяет передавать позиционные параметры на bash, доступ через $n для n-го позиционного параметра. Обратите внимание, что то, что фактически присвоено позиционной переменной bash, является результатом str(myPythonVariable). Если вы передаете строки, содержащие символы кавычек (или другие bash -чувствительные символы), вам нужно избежать их с помощью обратного слэша (например: \").

Кавычки важны - без них переменные python (представления строк) разбиваются на пробелы, поэтому если myPythonVar был datetime.datetime с str(myPythonVar) как "2013-10-30 05:04:09.797507", то указанный выше bash script получить 3 позиционные переменные, первые два со значениями 2013-10-30 и 05:04:09.797507. Его вывод будет:

This bash script knows about 2013-10-30 and 05:04:09.797507

Если вы хотите назвать переменные, и вы используете linux, используйте подход:

%%script env my_bash_variable="$myPythonVariable" bash
echo myPythonVariable\ value is $my_bash_variable

Вы можете указать несколько назначений переменных. Опять остерегайтесь цитат и других подобных вещей (здесь bash будет жаловаться горько!). Чтобы понять, почему это работает, см. Справочную страницу env.

Ответ 2

Чтобы включить переменные python в командах bash, используя синтаксис !<some command>, вы можете использовать {<variable>} следующим образом:

In [1]: for i in range(3):
   ...:     !echo {i+1}
   ...:     
1
2
3

Хотя это немного отличается от того, что задает OP, он тесно связан и полезен при выполнении задачи сценариев. Этот пост содержит больше полезных советов и примеров использования команды оболочки в записных книжках IPython и Jupyter.

Ответ 3

Нет, %%script магия автогенерируется и не выполняет никакой магической межпроцессной передачи данных. (что не относится к %%R, но это отдельная магия в своем классе с особой заботой от людей R)

Но писать свою собственную магию, которая делает это не слишком сложно.