How do I execute a bash command from Ipython/Jupyter notebook passing the value of a python variable as an argument like in this example:
py_var="foo" !grep py_var bar.txt
(obviously I want to grep for foo
and not the literal string py_var
)
Advertisement
Answer
General solution
As suggested by Catbuilts, use {..}
:
dir_path = "/home/foo/bar" !cp file1 {dir_path}
Its behaviour is more predictable than $..
. E.g. if you want to concatenate another string sub_dir
to your path, $
wouldn’t give the expected result, while with {..}
you can do:
!cp file1 {dir_path + sub_dir}
Initial (edited) answer
For simple cases, you can prefix your variable names with a $
.
Example
Say you want to copy a file file1
to a path stored in a python variable named dir_pth
:
dir_path = "/home/foo/bar" !cp file1 $dir_path
from Ipython or Jupyter notebook
As mentioned above, note that it may lead to unexpected results depending on the content of your variables and the way you associate them, hence the general solution should be preferred.
Raw strings
For a related discussion on the use of raw strings (prefixed with r
) to pass the variables, see Passing Ipython variables as string arguments to shell command