У моего argparse есть только 3 флага (store_true) на верхнем уровне, все остальное обрабатывается через подпарамеры. Когда я запускаю myprog.py --help
, на выходе отображается список всех подкоманд, таких как normal, {sub1, sub2, sub3, sub4, ...}
. Итак, по умолчанию работает отлично ...argparse subparser monolithic help output
Обычно я не помню точное имя подкоманды, которое мне нужно, и все его варианты. Так что я в конечном итоге делает 2 справки Lookups:
myprog.py --help
myprog.py sub1 --help
Я делаю это так часто, что я решил втиснуть это в один шаг. Я бы предпочел, чтобы мой помощник справился с огромным сводкой, а затем я просматриваю список вручную. Я считаю, что это намного быстрее (по крайней мере для меня).
Я использовал RawDescriptionHelpFormatter и печатал длинный вывод справки вручную. Но теперь у меня много подкоманд, и мне становится больно управлять.
Есть ли способ получить подробный вывод справки с помощью всего одного вызова программы?
Если нет, то как я могу перебирать подпараметры моего экземпляра argparse, а затем извлекать вывод справки отдельно от каждого из них (который позже я буду склеивать)?
Вот краткое описание моей установки argparse. Я очистил/раздели код честным битом, так что это может не работать без какой-либо помощи.
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)
Покажите нам крошечный пример с некоторым кодом, только пара вариантов и пара подпараллелей. –