python - 如何让 optparse 的 OptionParser 忽略无效选项?

标签 python optparse

在python的OptionParser ,如何指示它忽略提供给方法 parse_args 的未定义选项?

例如
我只为我的 OptionParser 实例定义了选项 --foo ,但我用列表调用 parse_args : [ '--foo ', '--bar' ]

我不在乎它是否会将它们从原始列表中过滤掉。我只想忽略未定义的选项。

我这样做的原因是因为我正在使用 SCons 的 AddOption 接口(interface)来添加自定义构建选项。但是,其中一些选项指导目标的声明。因此,我需要在脚本的不同点将它们从 sys.argv 中解析出来,而无需访问所有选项。最后,顶层的 Scons OptionParser 将捕获命令行中所有未定义的选项。

最佳答案

这是一种将未知参数添加到 OptionParser.parse_args 的结果 args 的方法,带有一个简单的子类。

from optparse import (OptionParser,BadOptionError,AmbiguousOptionError)

class PassThroughOptionParser(OptionParser):
    """
    An unknown option pass-through implementation of OptionParser.

    When unknown arguments are encountered, bundle with largs and try again,
    until rargs is depleted.  

    sys.exit(status) will still be called if a known argument is passed
    incorrectly (e.g. missing arguments or bad argument types, etc.)        
    """
    def _process_args(self, largs, rargs, values):
        while rargs:
            try:
                OptionParser._process_args(self,largs,rargs,values)
            except (BadOptionError,AmbiguousOptionError), e:
                largs.append(e.opt_str)

这里有一个片段表明它有效:

# Show that the pass-through option parser works.
if __name__ == "__main__": #pragma: no cover
    parser = PassThroughOptionParser()
    parser.add_option('-k', '--known-arg',dest='known_arg',nargs=1, type='int')
    (options,args) = parser.parse_args(['--shazbot','--known-arg=1'])    
    assert args[0] == '--shazbot'
    assert options.known_arg == 1

    (options,args) = parser.parse_args(['--k','4','--batman-and-robin'])
    assert args[0] == '--batman-and-robin'
    assert options.known_arg == 4

关于python - 如何让 optparse 的 OptionParser 忽略无效选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1885161/

相关文章:

python - 无法关闭 Mac 上的 wxPython 窗口

python - 控制Python数据类继承类时的初始化顺序

python - 快速评估产品

python - 结合 Tornado 和 zmq ioloops : Connection reset by peer exception

python - 从 optparse python 获取最后一个参数

python - 从 sys.argv 中删除已解析的选项及其值

Python optparse 默认值与函数默认值

python - OSX Mavericks 破坏了 pip 和 virtualenv

ruby - 将命令行参数解析为通配符

python - 暴力Python - OptParse 输出正确信息时遇到问题