Skip to content
Advertisement

Passing IPython variables as arguments to bash commands

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

Advertisement