pythonbashjupyter-notebookipythoncommand-line-arguments

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)


Solution

  • Simple case

    Prefix your variable names with a $.

    For example, say you want to copy a file file1 to a path stored in a python variable named dir_path:

    dir_path = "/home/foo/bar"
    !cp file1 $dir_path
    

    General case

    Wrap your variable names in {..}:

    dir_path = "/home/foo/bar"
    !cp file1 {dir_path}
    

    Its behaviour is more predictable and powerful than $... E.g. if you want to concatenate another string sub_dir to your path, $ can't do that, while with {..} you can do:

    !cp file1 {dir_path + sub_dir}
    

    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