我的 argparse 在顶层只有 3 个标志 (store_true),其他所有内容都通过子解析器处理。当我跑步时myprog.py --help
,输出像平常一样显示所有子命令的列表,{sub1, sub2, sub3, sub4, ...}
。所以,默认设置效果很好......
我通常记不起我需要的确切子命令名称及其所有选项。所以我最终做了两次帮助查找:
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)