是否可以为IPython的魔术命令添加自定义标志?更具体地说,我想使用带有自制标志的%run命令:
%run script.ipy --flag "option"
并且能够在脚本中使用“选项”。
对于.py文件,答案在此处提供:Command Line Arguments In Python
答案 0 :(得分:1)
正如评论中所指出的,这个问题不只是在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
doc有这一点:
有一种特殊用法,上述文字不适用于: 如果文件名以.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??
向我展示了它的doc和它的代码。因此,我可以看到它如何处理特殊的.ipy
文件。由于它很容易找到,我不会在这里复制它。
还有另一种解决方案 - 不要尝试使用ipy
文件的命令行编码方式。
如果我添加
print(x)
到该测试文件的行,并在我的Ipython会话中定义了x
,我看到了那个打印。但是我在.py
中添加了相同的图片,我会得到Nameerror
。当他们说ipy
运行就好像输入一样,就意味着它。实际上,运行ipy
是剪贴板中%paste
的替代方法。