作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
在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/
我是一名优秀的程序员,十分优秀!