Python: подкоманда подкоманды argparse?

У меня есть программа, которая имеет много доступных опций. Например, параметр конфигурации для изменения настроек.

./app config -h

дает мне помощь, используя обычные подкоманды argparse

теперь я хотел бы добавить еще одну подкоманду в подкоманду config, называемую списком, для отображения значений конфигурации.

./app config list

кроме того, эта команда должна принимать другую опцию, чтобы я мог сказать

./app config list CATEGORY

только чтобы перечислить конфиг одной категории

мой код прямо сейчас в основном это просто с большим количеством команд

>>> parser = argparse.ArgumentParser()
>>> subparsers = parser.add_subparsers(title='subcommands',
...                                    description='valid subcommands',
...                                    help='additional help')
>>> subparsers.add_parser('foo')
>>> subparsers.add_parser('bar')
>>> parser.parse_args(['-h'])
usage:  [-h] {foo,bar} ...

optional arguments:
  -h, --help  show this help message and exit

subcommands:
  valid subcommands

  {foo,bar}   additional help

До сих пор я не мог найти способ использовать подкоманду в подкоманде. Если это возможно, то как? Если нет, есть ли другой способ достичь этой цели?

Заранее спасибо


person cwoebker    schedule 03.12.2011    source источник
comment
Было бы лучше, если бы вы разместили свой код здесь, чтобы помочь другим понять вашу проблему.   -  person number5    schedule 03.12.2011
comment
Я рекомендую посмотреть библиотеку кликов click.palletsprojects.com/en /7.x/quickstart/#вложенные-команды   -  person Jonathan    schedule 19.04.2019


Ответы (1)


#file: argp.py

import argparse

parser = argparse.ArgumentParser(prog='PROG')
parser_subparsers = parser.add_subparsers()
sub = parser_subparsers.add_parser('sub')
sub_subparsers = sub.add_subparsers()
sub_sub = sub_subparsers.add_parser('sub_sub')                                                                       
sub_sub_subparsers = sub_sub.add_subparsers()
sub_sub_sub = sub_sub_subparsers.add_parser('sub_sub_sub')

Кажется, работает.

In [392]: run argp.py

In [393]: parser.parse_args('sub sub_sub sub_sub_sub'.split())
Out[393]: Namespace()

In [400]: sys.version_info
Out[400]: sys.version_info(major=2, minor=7, micro=2, releaselevel='final', serial=0)
person Derek Litz    schedule 03.12.2011
comment
Я пробовал с 2.7.2. Конечно, я хотел бы знать, есть ли у вас проблемы :) - person Derek Litz; 03.12.2011