Il mio argparse ha solo 3 flag (store_true) al livello superiore, tutto il resto viene gestito tramite i subparatori. Quando eseguo myprog.py --help
, l'output mostra un elenco di tutti i comandi secondari, come normale, {sub1, sub2, sub3, sub4, ...}
. Quindi, l'impostazione predefinita funziona perfettamente ...output di aiuto monolitico di subparser di argparse
Di solito non riesco a ricordare il nome esatto del sottocomando che mi serve e tutte le sue opzioni. Così finisco per fare 2 aiuto ricerche:
myprog.py --help
myprog.py sub1 --help
Lo faccio così spesso, ho deciso di stipare questo in un solo passo. Preferirei che il mio aiuto di primo livello fornisse un sommario enorme, quindi scorrerò l'elenco manualmente. Trovo che sia molto più veloce (almeno per me).
Stavo usando un RawDescriptionHelpFormatter e sto scrivendo a mano l'output di aiuto lungo. Ma ora ho molti sottocomandi e sta diventando un problema da gestire.
C'è un modo per ottenere un output dettagliato con una sola chiamata di programma?
In caso contrario, come posso eseguire l'iterazione dei subparser della mia istanza argparse e quindi recuperare l'output della guida singolarmente da ognuno (che poi incollerò insieme)?
Ecco una breve descrizione del mio setup argparse. Ho pulito/spogliato il codice un bel po ', quindi questo potrebbe non funzionare senza un po' di aiuto.
parser = argparse.ArgumentParser(
prog='myprog.py',
formatter_class=argparse.RawDescriptionHelpFormatter,
description=textwrap.dedent(""" You can manually type Help here """))
parser.add_argument('--debuglog', action='store_true', help='Verbose logging for debug purposes.')
parser.add_argument('--ipyonexit', action='store_true', help='Drop into an embeded Ipython session instead of exiting command.')
subparser = parser.add_subparsers()
### --- Subparser B
parser_b = subparser.add_parser('pdfreport', description="Used to output reports in PDF format.")
parser_b.add_argument('type', type=str, choices=['flatlist', 'nested', 'custom'],
help="The type of PDF report to generate.")
parser_b.add_argument('--of', type=str, default='',
help="Override the path/name of the output file.")
parser_b.add_argument('--pagesize', type=str, choices=['letter', '3x5', '5x7'], default='letter',
help="Override page size in output PDF.")
parser_b.set_defaults(func=cmd_pdf_report)
### ---- Subparser C
parser_c = subparser.add_parser('dbtables', description="Used to perform direct DB import/export using XLS files.")
parser_c.add_argument('action', type=str, choices=['push', 'pull', 'append', 'update'],
help="The action to perform on the Database Tables.")
parser_c.add_argument('tablename', nargs="+",
help="The name(s) of the DB-Table to operate on.")
parser_c.set_defaults(func=cmd_db_tables)
args = parser.parse_args()
args.func(args)
Mostraci un piccolo esempio con un po 'di codice, solo un paio di opzioni e un paio di subparser. –