我正在寻找一种优雅的方法来折叠布尔切换的帮助消息 argparse。例如:
import argparse
parser = argparse.ArgumentParser("booleans")
parser.add_argument('--no-store', action='store_false',
help="Don't do it'")
parser.add_argument('--store', action='store_true',
help="Do it")
parser.print_help()
打印:
usage: booleans [-h] [--no-store] [--store]
optional arguments:
-h, --help show this help message and exit
--no-store Don't do it'
--store Do it
但是我有一大堆布尔标志,我真正喜欢的是能够以打印方式编写它:
usage: booleans [-h] [--[no-]store]
optional arguments:
-h, --help show this help message and exit
--[no-]store Do or don't do it.
我有什么好方法可以折叠参数,并提供自定义帮助 文字和选项名称?
答案 0 :(得分:1)
您可以为usage
指定ArgumentParser
参数,并编写自己的语法行。
答案 1 :(得分:1)
usage = ['booleans [-h]']
parser = argparse.ArgumentParser("booleans",usage=usage[0],
formatter_class=argparse.RawDescriptionHelpFormatter)
grp1 = parser.add_argument_group(title='Boolean arguments',description='')
def foo(group, name, help):
# create a pair of arguments, with one 'help' line
group.add_argument('--no-'+name, action='store_false', help=argparse.SUPPRESS)
group.add_argument('--'+name, action='store_true', help=argparse.SUPPRESS)
usage.append(' [--[no-]%s]'%name)
group.description += "[--[no-]%s]\t%s.\n"%(name,help)
foo(grp1, 'store', "Do or don't do it",)
foo(grp1, 'remove', "Do or don't do it",)
parser.usage = ''.join(usage)
parser.print_help()
产生
usage: booleans [-h] [--[no-]store] [--[no-]remove]
optional arguments:
-h, --help show this help message and exit
Boolean arguments:
[--[no-]store] Do or don't do it.
[--[no-]remove] Do or don't do it.
我使用RawDescriptionHelpFormatter
来允许使用\t
。它还允许多行描述(其他参数对)。
使用SUPPRESS
,参数是grp1
还是parser
并不重要。