58
задан 26 October 2011 в 00:44

1 ответ

принятый ответ корректен; надлежащий путь состоит в том, чтобы использовать родительские синтаксические анализаторы . Однако пример кода 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
5
ответ дан 1 November 2019 в 14:35

Другие вопросы по тегам:

Похожие вопросы: