【发布时间】:2020-05-04 13:19:15
【问题描述】:
我想实现参数解析。
./app.py -E [optional arg] -T [optional arg]
脚本至少需要以下参数之一:-E 或 -T
我应该在parser.add_argument 中传递什么来获得这样的功能?
更新
由于某些原因,当我添加了nargs='?' 和const= 属性时,add_mutually_exclusive_group 的建议解决方案不起作用:
parser = argparse.ArgumentParser(prog='PROG')
group = parser.add_mutually_exclusive_group(required=True)
group.add_argument('-F', '--foo', nargs='?', const='/tmp')
group.add_argument('-B', '--bar', nargs='?', const='/tmp')
parser.parse_args([])
以script.py -F 运行仍然会抛出错误:
PROG: error: one of the arguments -F/--foo -B/--bar is required
但是,以下解决方法帮助了我:
parser = argparse.ArgumentParser(prog='PROG')
parser.add_argument('-F', '--foo', nargs='?', const='/tmp')
parser.add_argument('-B', '--bar', nargs='?', const='/tmp')
args = parser.parse_args()
if (not args.foo and not args.bar) or (args.foo and args.bar):
print('Must specify one of -F/-B options.')
sys.exit(1)
if args.foo:
foo_func(arg.foo)
elif args.bar:
bar_func(args.bar)
...
【问题讨论】: