IPython运行魔术:如何为“run -i”创建别名?

时间:2016-07-09 02:23:50

标签: python ipython ipython-magic

我正在编写一个python用户界面来控制实验室中的各种乐器。如果脚本没有以交互方式运行,则在脚本结束时会丢失与仪器的连接,这可能非常糟糕。我想帮助用户“记住”以交互方式运行脚本。

我正在考虑两种可行的方法。首先,如标题中所述,我可以为run -i

创建别名
%alias_magic lab_run run -i

但这会返回错误:

UsageError: unrecognized arguments: -i 

有没有办法解决这个问题?

或者,我可以在脚本内部检测是否传递了-i标志,如果没有则引发错误。但是,它不会显示在sys.argv列表中:

In [1]: import sys
In [2]: run -i test.py random args
['test.py', 'random', 'args']

我无法使用ipy文件,因为我需要读取%run标志,如我在上一个问题中所解释的: How to add a custom flag to IPython's magic commands? (.ipy files)

有人看到这个问题的解决方案吗?

1 个答案:

答案 0 :(得分:4)

您可以定义自己的魔术功能并在其中使用%run -i

from IPython.core.magic import register_line_magic

@register_line_magic
def r(line):
    get_ipython().magic('run -i ' + line)

del r

修改

正如hpaulj指出magic已被弃用。这里有一个新版本 run_line_magic

from IPython.core.magic import register_line_magic

@register_line_magic
def r(line):
    get_ipython().run_line_magic('run', ' -i ' + line)

del r
Now:

%r

与:

相同
%run -i