我正在尝试配置argparse
,以便仅以下参数组合有效:
--flagA --argument1 val1 --argument2 val2 --argument3 val3
--flagB --argument1 val1
到目前为止,我已经编写了以下代码,但是并没有成功,因为--argument2
和--argument3
都是可选的:
required_args = arg_parser.add_argument_group()
required_args.add_argument('--argument1',required=True)
# Optional arguments
optional_args = arg_parser.add_argument_group()
optional_args.add_argument('--argument2',required=False)
optional_args.add_argument('--argument3',required=False)
# flags
flag_group = arg_parser.add_mutually_exclusive_group(required=True)
flag_group.add_argument('--flagA',dest='flag',action='store_const',const="flagA")
flag_group.add_argument('--flagB',const="flagB")
args = vars(arg_parser.parse_args())
使用此设置,--flagA --argument1 val1
也是,但不应该。
我知道我可以处理调用Namespace
之后生成的.parse_args()
,并检查在传递--argument2
时是否提供了--argument3
和--flagA
,但是我寻找一种更自然的方法来实现这一目标。
基本上,该定义应类似于以下内容:
[-h] --argument1 ARGUMENT1 (--flagA --argument2 ARGUMENT2 --argument3 ARGUMENT3 | --flagB)