如何为 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
的替代方法。
是否可以在 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
的替代方法。