Я пытаюсь настроить 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', dest='flag', action='store_const', 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)