是否可以在 IPython 的魔术命令中添加自定义标志?更具体地说,我想使用带有自制标志的 %run 命令:
%run script.ipy --flag "option"
并且能够在脚本中使用“选项”。
对于 .py 文件,此处提供了答案:Python 中的命令行参数
是否可以在 IPython 的魔术命令中添加自定义标志?更具体地说,我想使用带有自制标志的 %run 命令:
%run script.ipy --flag "option"
并且能够在脚本中使用“选项”。
对于 .py 文件,此处提供了答案:Python 中的命令行参数
正如评论中所指出的,这个问题不仅仅是在 Python 脚本中处理命令行参数。这是关于在.ipy
通过%run
.
如果我创建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
文档有这一点:
上面的文本有一种特殊用法不适用:如果文件名以 .ipy[nb] 结尾,则文件作为 ipython 脚本运行,就像在 IPython 提示符下编写命令一样。
在这种情况下,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
脚本现在可以看到它们。
所以这就是答案 - 将命令行参数放在使用sys.argv
之前%run ...ipy
。
sys.argv
(我在用 .做高级事情时做过这种摆弄argparse
。)
更多ipython
魔法
In [480]: %run??
向我展示了它的文档和代码。因此,我可以看到它是如何处理.ipy
特殊文件的。由于它很容易找到,我将避免在此处复制它。
还有另一种解决方案 - 不要尝试对ipy
文件使用命令行样式的编码。
如果我添加一个
print(x)
到该测试文件的行,并x
在我的 Ipython 会话中定义,我看到了该打印。但我把同样的印刷品放在 a 中.py
,我会得到 a Nameerror
。当他们说ipy
运行就像输入一样时,他们是认真的。ipy
实际上,运行 an是%paste
从剪贴板中的替代方法。