Lau*_*ent 4 python ipython ipython-magic
我正在编写一个 python 用户界面来控制实验室中的各种仪器。如果脚本不是交互式运行的,则在脚本结束时与仪器的连接会丢失,这可能非常糟糕。我想帮助用户“记住”以交互方式运行脚本。
我正在考虑两种可能的方法来做到这一点。首先,如标题中所指定,我可以为run -i:
%alias_magic lab_run run -i
Run Code Online (Sandbox Code Playgroud)
但这会返回一个错误:
UsageError: unrecognized arguments: -i
Run Code Online (Sandbox Code Playgroud)
有没有办法解决这个问题?
或者,我可以在脚本内部检测是否-i传递了标志,如果没有则引发错误。但是,它没有出现在sys.argv列表中:
In [1]: import sys
In [2]: run -i test.py random args
['test.py', 'random', 'args']
Run Code Online (Sandbox Code Playgroud)
我不能使用 ipy 文件,因为我需要读取 %run 标志,正如我在上一个问题中所解释的: 如何向 IPython 的魔术命令添加自定义标志?(.ipy 文件)
有人看到这个问题的解决方案吗?
您可以定义自己的魔法函数并%run -i在其中使用:
from IPython.core.magic import register_line_magic
@register_line_magic
def r(line):
get_ipython().magic('run -i ' + line)
del r
Run Code Online (Sandbox Code Playgroud)
编辑
正如 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 Code Online (Sandbox Code Playgroud)
与以下相同:
%run -i
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
758 次 |
| 最近记录: |