Pregunta

Tengo un programa que tiene muchas opciones disponibles. Por ejemplo, una opción de configuración para cambiar la configuración.

./app config -h

me da la ayuda usando subcomands argparse normales

Ahora me gustaría agregar otro subcomando al subcomando de configuración llamado Lista a la lista de valores de configuración

./app config list

Además, ese comando debe aceptar otra opción para que yo pueda decir

./app config list CATEGORY

solo para enumerar la configuración de una categoría

Mi código ahora mismo es básicamente esto solo con más comandos

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

Hasta ahora no pude encontrar ninguna forma de usar un subcomando en un subcomando. Si esto es posible, ¿cómo? Si no, ¿hay alguna otra forma de lograr este objetivo?

Gracias de antemano

¿Fue útil?

Solución

#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')

Parece funcionar.

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)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top