采用以下相当标准的代码:
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()
Run Code Online (Sandbox Code Playgroud)
假设-x并且-f是互斥的:当-x和-f明确存在时,应报告错误.
如何检测是否-x明确存在?即使不是,也options列出默认值.
一种方法是避免设置我宁愿不会做的默认值,因为--help打印默认值很好.
另一种方法是检查其中sys.argv的实例-x是否有点尴尬,如果有多个名称-x(即, - long-name)并且有多对互斥选项.
它有一个优雅的解决方案吗?
您可以optparse使用回调来完成此操作.从您的代码构建:
from optparse import OptionParser
def set_x(option, opt, value, parser):
parser.values.x = value
parser.values.x_set_explicitly = True
opts = OptionParser()
opts.add_option('-f', action="store_true")
opts.add_option("-x", dest="x", type="int", default=1, action='callback',
callback=set_x)
options, args = opts.parse_args()
opts.values.ensure_value('x_set_explicitly', False)
if options.x_set_explicitly and options.f:
opts.error('options -x and -f are mutually exclusive')
Run Code Online (Sandbox Code Playgroud)
我们op.py现在就调用这个脚本.如果我这样做python op.py -x 1 -f,答案是:
用法:op.py [options]
op.py:error:options -x和-f是互斥的
argparse.add_mutually_exclusive_group(所需=假)
创建一个互斥的组.argparse将确保命令行中只存在互斥组中的一个参数:
>>> 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
Run Code Online (Sandbox Code Playgroud)
无论如何,optparse已被弃用.
| 归档时间: |
|
| 查看次数: |
8066 次 |
| 最近记录: |