采取以下相当标准的代码:
from optparse import OptionParser
opts = OptionParser()
opts.add_option('-f', action="store_true")
opts.add_option("-x", dest="x", type="int", default=1)
options, args = opts.parse_args()
假定
-x
和-f
是互斥的:当-x
和-f
都显式存在时,应报告一个错误。如何检测
-x
是否明确存在?即使不是,options
也会列出默认值。一种方法是避免设置默认值,因为
--help
可以很好地打印默认值,所以我不会这样做。另一种方法是检查
sys.argv
中是否有-x
实例,这也有点尴尬,如果-x
的名称不只一个(即--long-name),并且有一对以上的互斥选项。是否有一个优雅的解决方案?
最佳答案
使用argparse。有一个mutually exclusive groups的部分:
>>> parser = argparse.ArgumentParser(prog='PROG')
>>> group = parser.add_mutually_exclusive_group()
>>> group.add_argument('--foo', action='store_true')
>>> group.add_argument('--bar', action='store_false')
>>> parser.parse_args(['--foo'])
Namespace(bar=True, foo=True)
>>> parser.parse_args(['--bar'])
Namespace(bar=False, foo=False)
>>> parser.parse_args(['--foo', '--bar'])
usage: PROG [-h] [--foo | --bar]
PROG: error: argument --bar: not allowed with argument --foo
无论如何,optparse已被弃用。
关于python - Python optparse,默认值和显式选项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8046064/