принятый ответ корректен; надлежащий путь состоит в том, чтобы использовать родительские синтаксические анализаторы . Однако пример кода IMO действительно не решал проблему. Позвольте мне добавить свои немного центов для обеспечения более подходящего примера.
основным различием для принятого ответа является явная возможность иметь некоторые корневые аргументы level (как --verbose
), а также совместно использованные аргументы только в пользу [1 111] приблизительно [1 111] подсинтаксические анализаторы (-p
только для create
и update
подсинтаксические анализаторы, но не для других)
# Same main parser as usual
parser = argparse.ArgumentParser()
# Usual arguments which are applicable for the whole script / top-level args
parser.add_argument('--verbose', help='Common top-level parameter',
action='store_true', required=False)
# Same subparsers as usual
subparsers = parser.add_subparsers(help='Desired action to perform', dest='action')
# Usual subparsers not using common options
parser_other = subparsers.add_parser("extra-action", help='Do something without db')
# Create parent subparser. Note `add_help=False` and creation via `argparse.`
parent_parser = argparse.ArgumentParser(add_help=False)
parent_parser.add_argument('-p', help='add db parameter', required=True)
# Subparsers based on parent
parser_create = subparsers.add_parser("create", parents=[parent_parser],
help='Create something')
# Add some arguments exclusively for parser_create
parser_update = subparsers.add_parser("update", parents=[parent_parser],
help='Update something')
# Add some arguments exclusively for parser_update
Это - сообщение справки верхнего уровня (обратите внимание, что -p
параметр не показывают здесь, который является точно, что Вы были бы expect— потому что это характерно для некоторых подсинтаксических анализаторов):
>>> parser.print_help()
usage: [-h] [--verbose] {extra-action,create,update} ...
positional arguments:
{extra-action,create,update}
Desired action to perform
extra-action Do something without db
create Create something
update Update something
optional arguments:
-h, --help show this help message and exit
--verbose Common top-level parameter
И справка обмениваются сообщениями для create
действие:
>>> parser_create.print_help()
usage: create [-h] -p P
optional arguments:
-h, --help show this help message and exit
-p P add db parameter