如何在IPython中将变量传递给magic'run'函数

nad*_*pez 72 python ipython ipython-magic

我想做类似以下的事情:

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

In[2]: %run name
Run Code Online (Sandbox Code Playgroud)

但这实际上是试图运行'name.py',这不是我想要做的.

是否有将变量转换为字符串的一般方法?

类似于以下内容:

In[3]: %run %name%
Run Code Online (Sandbox Code Playgroud)

min*_*nrk 112

IPython使用$namebash-style 扩展变量.这对所有魔法都是如此,而不仅仅是%run.

所以你会这样做:

In [1]: filename = "myscript.py"

In [2]: %run $filename
['myscript.py']
Run Code Online (Sandbox Code Playgroud)

myscript.py包含:

import sys
print(sys.argv)
Run Code Online (Sandbox Code Playgroud)

通过Python的花式字符串格式,您甚至可以将表达式放在{}:

In [3]: args = ["arg1", "arg2"]

In [4]: %run $filename {args[0]} {args[1][-2:]}
['myscript.py', 'arg1', 'g2']
Run Code Online (Sandbox Code Playgroud)

  • 只是想提一下,当使用感叹号(!)运行任意shell命令时,这也很有效 - 请参阅官方文档 - http://ipython.org/ipython-doc/rel-0.10.2/html/interactive /reference.html#manual-capture-of-command-output (5认同)

Dav*_*ver 10

使用get_ipython()去的电流的基准InteractiveShell,然后调用magic()方法:

In [1]: ipy = get_ipython()

In [2]: ipy.magic("run foo.py")
ERROR: File `u'foo.py'` not found.
Run Code Online (Sandbox Code Playgroud)

编辑看到minrk的答案 - 这是一个更好的方法.

  • 虽然这不是最好的方法,但它回答了我的另一个问题,即如何在 python 控制台中执行 ipython 魔术命令(如使用 spyder 时) (2认同)