如何让 optparse 的 OptionParser 忽略无效选项?
在python的 OptionParser
中,我该如何指示它忽略提供给方法 parse_args 的未定义选项?
例如
我只为我的 OptionParser
实例定义了选项 --foo
,但我使用列表调用 parse_args
:[ '--foo ', '--bar' ]
我不在乎它是否将它们从原始列表中过滤掉。我只想忽略未定义的选项。
我这样做的原因是因为我使用 SCons 的 AddOption
接口来添加自定义构建选项。然而,其中一些选项指导目标的声明。因此,我需要在脚本的不同点从 sys.argv 中解析它们,而无需访问所有选项。最后,顶层 Scons OptionParser 会捕获命令行中所有未定义的选项。
In python's OptionParser
, how can I instruct it to ignore undefined options supplied to method parse_args
?
e.g.
I've only defined option --foo
for my OptionParser
instance, but I call parse_args
with list: [ '--foo', '--bar' ]
I don't care if it filters them out of the original list. I just want undefined options ignored.
The reason I'm doing this is because I'm using SCons' AddOption
interface to add custom build options. However, some of those options guide the declaration of the targets. Thus I need to parse them out of sys.argv
at different points in the script without having access to all the options. In the end, the top level Scons OptionParser
will catch all the undefined options in the command line.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
下面是一种通过简单的子类将未知参数添加到 OptionParser.parse_args 的结果 args 中的方法。
这是一个片段来表明它是有效的:
Here's one way to have unknown arguments added to the result
args
ofOptionParser.parse_args
, with a simple subclass.And here's a snippet to show that it works:
默认情况下,无法修改传递未定义选项时引发的
error()
调用的行为。从关于 optparse 如何处理错误<的部分底部的文档/a>:最简单的例子是:
这只会使所有对
error()
的调用不执行任何操作。当然这并不理想,但我相信这说明了您需要做什么。请记住error()
中的文档字符串,您应该可以继续进行:By default there is no way to modify the behavior of the call to
error()
that is raised when an undefined option is passed. From the documentation at the bottom of the section on how optparse handles errors:The simplest example of this would be:
This would simply make all calls to
error()
do nothing. Of course this isn't ideal, but I believe that this illustrates what you'd need to do. Keep in mind the docstring fromerror()
and you should be good to go as you proceed:Python 2.7(提出这个问题时还不存在)现在提供 argparse< /a> 模块。您也许可以使用
ArgumentParser.parse_known_args()
来完成这个问题的目标。Python 2.7 (which didn't exist when this question was asked) now provides the argparse module. You may be able to use
ArgumentParser.parse_known_args()
to accomplish the goal of this question.这是来自 Optik 发行版 的
pass_through.py
示例。This is
pass_through.py
example from Optik distribution.根据不同答案评论中 synack 的请求,我发布了一个解决方案的 hack,该解决方案在将输入传递给父
OptionParser
之前对输入进行清理:Per synack's request in a different answer's comments, I'm posting my hack of a solution which sanitizes the inputs before passing them to the parent
OptionParser
: