Мой argparse имеет только 3 флага (store_true) на верхнем уровне, все остальное обрабатывается через подпарамеры. Когда я запускаю myprog.py --help
, на выходе отображается список всех подкоманд, таких как normal, {sub1, sub2, sub3, sub4, ...}
. Итак, по умолчанию работает отлично...
Я обычно не помню точное имя подкоманды, которое мне нужно, и все его параметры. Таким образом, я получаю 2 справки по поиску:
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)