4

我正在编写一个 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 标志,正如我之前的问题中所述: 如何向 IPython 的魔法命令添加自定义标志?(.ipy 文件)

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

4

2 回答 2

6

您可以定义自己的魔法函数并%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
于 2016-07-09T02:48:46.973 回答
0

谢谢@Mike的回答,它为我指明了制作细胞魔法别名的正确方向

我发现%alias_magic [-l] [-c] [-p PARAMS] name target,在文档中,对我有用

就我而言:

%alias_magic --cell py_310 script -p C:\Users\myname\AppData\Local\Programs\Python\Python310\python

输出

Created `%%py_310` as an alias for `%%script C:\Users\myname\AppData\Local\Programs\Python\Python310\python`.

然后可以像这样使用

%%py_310

import sys

print(sys.version_info)

输出

sys.version_info(major=3, minor=10, micro=1, releaselevel='final', serial=0)
于 2022-01-30T11:54:09.063 回答