Python: Subcommand Subcomand Argparse?
Domanda
Ho un programma che ha molte opzioni disponibili. Ad esempio un'opzione di configurazione per modificare le impostazioni.
./app config -h
mi dà l'aiuto usando i normali sottocombi ArgParse
Ora vorrei aggiungere un altro sottocomando al sottocomando di configurazione chiamato elenco per elencare i valori di configurazione
./app config list
Inoltre quel comando dovrebbe accettare un'altra opzione in modo da poter dire
./app config list CATEGORY
solo per elencare la configurazione di una categoria
Il mio codice in questo momento è fondamentalmente 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 sono riuscito a trovare alcun modo per utilizzare un sottocomando in un sottocomando. Se questo è possibile, come? In caso contrario, c'è un altro modo per raggiungere questo obiettivo?
Grazie in anticipo
Soluzione
#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)