Есть ли способ доступа к переменным в текущем ядре python из %%bash
или другой ячейки %%script
?
Возможно, в качестве аргументов командной строки или переменных среды?
Есть ли способ доступа к переменным в текущем ядре python из %%bash
или другой ячейки %%script
?
Возможно, в качестве аргументов командной строки или переменных среды?
Переменные 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
.
Чтобы включить переменные python в командах bash, используя синтаксис !<some command>
, вы можете использовать {<variable>}
следующим образом:
In [1]: for i in range(3):
...: !echo {i+1}
...:
1
2
3
Хотя это немного отличается от того, что задает OP, он тесно связан и полезен при выполнении задачи сценариев. Этот пост содержит больше полезных советов и примеров использования команды оболочки в записных книжках IPython и Jupyter.
Нет, %%script
магия автогенерируется и не выполняет никакой магической межпроцессной передачи данных. (что не относится к %%R
, но это отдельная магия в своем классе с особой заботой от людей R
)
Но писать свою собственную магию, которая делает это не слишком сложно.