1

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

%run script.ipy --flag "option"

并且能够在脚本中使用“选项”。

对于 .py 文件,此处提供了答案:Python 中的命令行参数

4

1 回答 1

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文档有这一点:

上面的文本有一种特殊用法不适用:如果文件名以 .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从剪贴板中的替代方法。

于 2016-07-05T19:27:58.877 回答