2011-12-03 20 views
6

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

./app config -h 

me da la ayuda utilizando los subcomandos argparse normales

Ahora me gustaría añadir otro secundario para el subcomando config lista llamada a la lista de configuración de los valores

./app config list 

, además, que comando debería aceptar otro opción para poder decir

./app config list CATEGORY 

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

mi código en este momento es básicamente esto sólo 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 he podido encontrar ninguna manera de utilizar un subcomando en un subcomando. Si esto es posible, ¿cómo? Si no, ¿hay alguna otra forma de lograr este objetivo?

Gracias de antemano

+0

Sería mejor si publica su código aquí, para ayudar a otros a entender su problema. – number5

Respuesta

8
#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) 
+0

siento que ya lo intenté, pero no lo sé, gracias – cwoebker

+0

Probé con 2.7.2 Me gustaría saber si tienes problemas :) –

Cuestiones relacionadas