2011-12-03 4 views
6

Ho un programma che ha molte opzioni disponibili. Ad esempio un'opzione di configurazione per modificare le impostazioni.Python: sottocomando Argparse del sottocomando?

./app config -h 

mi dà l'aiuto utilizzando le normali subcommands argparse

Ora vorrei aggiungere un altro sottocomando per il sottocomando config chiamato list per elencare config valori

./app config list 

inoltre che il comando dovrebbe accettare un altro opzione in modo da poter dire

./app config list CATEGORY 

solo per elencare la configurazione di una categoria

il mio codice in questo momento è in fondo questo solo con più comandi

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

Finora non ho potuto trovare un modo per utilizzare un sottocomando in un sottocomando. Se questo è possibile, come? In caso contrario, c'è qualche altro modo per raggiungere questo obiettivo?

Grazie in anticipo

+0

Sarebbe meglio se pubblichi il tuo codice qui, per aiutare gli altri a capire il tuo problema. – number5

risposta

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

sembra funzionare.

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

mi sento come se ci avessi già provato, ma non lo so, grazie – cwoebker

+0

ho provato con 2.7.2 mi piacerebbe sapere se hai problemi :) –