Python: подкоманда подкоманды argparse? - PullRequest
6 голосов
/ 03 декабря 2011

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

./app config -h

дает мне помощь при использовании обычных подкоманд argparse

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

./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

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

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

1 Ответ

8 голосов
/ 03 декабря 2011
#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)
...