Ситуация
Один модуль (назовем его A
) реализует «основной» анализатор argparse, который анализирует известные аргументы, общие для всех дочерних классов (используя parser.parse_known_args(argv)
). Затем он передает оставшиеся аргументы другому объекту, который он вызывает. Предположим, что это может быть либо объект класса B
, либо C
. И B
, и C
имеют свои собственные парсеры argparse, которые анализируют оставшиеся аргументы (используя parser.parse_args(argv)
). Они принимают разные аргументы, специфичные для класса B
или C
.
Пример фрагмента из класса A
:
parser = argparse.ArgumentParser(
description="Parent parser",
formatter_class=argparse.RawTextHelpFormatter,
allow_abbrev=False
)
parser.add_argument('--argument_A', action="append", default=None,
help="Help of first argument of parser A")
known, remaining_args = parser.parse_known_args(argv)
my_obj = self.create_obj(b_or_c, remaining_args)
Пример фрагмента из класса B
:
parser = argparse.ArgumentParser(
description="Class B parser",
formatter_class=argparse.RawTextHelpFormatter,
allow_abbrev=False
)
parser.add_argument('--argument_B', action="append", default=None,
help="Help of first argument of parser B")
B_arguments_parsed = parser.parse_args(argv)
Пример фрагмента из класса C
:
parser = argparse.ArgumentParser(
description="Class C parser",
formatter_class=argparse.RawTextHelpFormatter,
allow_abbrev=False
)
parser.add_argument('--argument_C', action="append", default=None,
help="Help of first argument of parser C")
C_arguments_parsed = parser.parse_args(argv)
Хотя реализовать передачу аргументов и их анализ в нужных местах было легко, я не нашел простого решения для вывода правильной справки.
Вопрос
Как реализовать справочное сообщение, чтобы мой родительский парсер (из класса A
) печатал свою собственную справку и справку из парсера B
или C
?
Я хотел бы видеть справочное сообщение от парсера A
и, в зависимости от того, какой объект был выбран, парсер B
или C
.