我的argparse頂層只有3個標記(store_true),其他所有內容都通過子分析器處理。當我運行myprog.py --help
時,輸出顯示了像普通的所有子命令的列表,{sub1, sub2, sub3, sub4, ...}
。所以,默認工作很好...argparse subparser單片幫助輸出
我通常不記得我需要的確切子命令名稱及其所有選項。所以我最終做了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)
向我們展示一些代碼的小例子,只是一些選項和幾個子分析器。 –