如何为 IPython 的魔术命令添加自定义标志? (.ipy 文件)

How to add a custom flag to IPython's magic commands? (.ipy files)

是否可以在 IPython 的魔术命令中添加自定义标志?更具体地说,我想使用带有自制标志的 %运行 命令:

%run script.ipy --flag "option"

并能够在脚本中使用 "option"。

对于 .py 文件,这里提供了答案:Command Line Arguments In Python

如评论中所示,这个问题不仅仅是关于在 Python 脚本中处理命令行参数。这是关于通过 %run.

.ipy 文件 运行 中处理它们

如果我创建 test.ipy

import sys
print(sys.argv)

和 运行 它来自 shell,我看到命令行参数:

1223:~/mypy$ python3 test.ipy -test foo
['test.ipy', '-test', 'foo']

但是在 ipython 会话中,我没有

In [464]: %run test.ipy --flag test
['/usr/bin/ipython3']

如果我使用 py 名称制作副本

In [468]: %run testipy.py --flag test
['testipy.py', '--flag', 'test']

所以 %run ...ipy 的行为不同。这是一个 ipython 问题,而不是一般的 Python 命令行问题。

================

%run 文档有这一点:

There is one special usage for which the text above doesn't apply: if the filename ends with .ipy[nb], the file is run as ipython script, just as if the commands were written on IPython prompt.

在这种情况下,test.ipy 脚本看到的 sys.argv 与我输入时看到的相同:

In [475]: sys.argv
Out[475]: ['/usr/bin/ipython3']

因此,如果我在当前会话中修改 sys.argv,例如通过附加几个字符串:

In [476]: sys.argv += ['--flag','test']

In [477]: sys.argv
Out[477]: ['/usr/bin/ipython3', '--flag', 'test']

In [479]: %run test.ipy
['/usr/bin/ipython3', '--flag', 'test']

我的 ipy 脚本现在可以看到它们。

这就是答案 - 在使用 %run ...ipy.

之前将命令行参数放在 sys.argv

(我在用 argparse 做高级事情时用 sys.argv 做了这种摆弄。)

更多ipython魔法

In [480]: %run??

向我展示了它的文档和代码。因此,我可以看到它是如何处理一个特殊的 .ipy 文件的。因为太容易找了,这里就不复制了。

还有另一种解决方案 - 不要尝试对 ipy 个文件使用命令行编码风格。

如果我加一个

print(x)

到该测试文件的行,并在我的 Ipython 会话中定义了一个 x,我看到了那个打印。但我将相同的印刷品放在 .py 中,我会得到 Nameerror。当他们说 ipy 是 运行 时,就好像它是输入的一样,他们是认真的。 运行 ipy 实际上是剪贴板中 %paste 的替代方法。