pythonipythonipython-magic

How to pass a variable to magic ´run´ function in IPython


I want to do something like the following:

In[1]: name = 'long_name_to_type_every_now_and_then.py'

In[2]: %run name

but this actually tries to run 'name.py', which is not what I want to do.

Is there a general way to turn variables into strings?

Something like the following:

In[3]: %run %name%

Solution

  • IPython expands variables with $name, bash-style. This is true for all magics, not just %run.

    So you would do:

    In [1]: filename = "myscript.py"
    
    In [2]: %run $filename
    ['myscript.py']
    

    myscript.py contains:

    import sys
    print(sys.argv)
    

    Via Python's fancy string formatting, you can even put expressions inside {}:

    In [3]: args = ["arg1", "arg2"]
    
    In [4]: %run $filename {args[0]} {args[1][-2:]}
    ['myscript.py', 'arg1', 'g2']