如何使用argparse处理从属参数?

我正在尝试配置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)
qqliujiaolong 回答:如何使用argparse处理从属参数?

您是否考虑过对两个标志使用子解析器?

类似的东西

arg_parser = argparse.ArgumentParser()

subparser = arg_parser.add_subparsers(dest="flag",required=True)

flag_a = subparser.add_parser('flagA')
flag_a.add_argument('--argument1',required=True)
flag_a.add_argument('--argument2',required=True)
flag_a.add_argument('--argument3',required=True)

flag_b = subparser.add_parser('flagB')
flag_b.add_argument('--argument1',required=True)

希望这会有所帮助

本文链接:https://www.f2er.com/3142392.html

大家都在问