gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 20:24:19 27 4
gpt4 key购买 nike

在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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com