Is there a way to access variables in the current python kernel from within a %%bash
or other %%script
cell?
Perhaps as command line arguments or environment variable(s)?
Python variables can be accessed in the first line of a %%bash
or %%script
cell, and so can be passed as command line parameters to the script. For example, with bash you can do this:
%%bash -s "$myPythonVar" "$myOtherVar"
echo "This bash script knows about $1 and $2"
The -s
command line option allows you to pass positional parameters to bash, accessed through $n
for the n-th positional parameter. Note that what's actually assigned to the bash positional variable is the result of str(myPythonVariable)
. If you're passing strings containing quote characters (or other bash-sensitive characters), you'll need to escape them with a backslash (eg: \"
).
The quotes are important - without them the python variables (string representations) are split on spaces, so if myPythonVar
was a datetime.datetime
with str(myPythonVar)
as "2013-10-30 05:04:09.797507"
, the above bash script would receive 3 positional variables, the first two with values 2013-10-30
and 05:04:09.797507
. It's output would be:
This bash script knows about 2013-10-30 and 05:04:09.797507
If you want to name the variables and you're running linux, here's an approach:
%%script env my_bash_variable="$myPythonVariable" bash
echo myPythonVariable\'s value is $my_bash_variable
You can specify multiple variable assignments. Again beware of quotes and other such things (here bash will complain bitterly!). To grok why this works, see the env
man page.