1

我正在寻找一种优雅的方式来折叠 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.

我有什么好方法可以折叠参数并提供自定义帮助文本和选项名称吗?

4

2 回答 2

1

您可以指定usage参数ArgumentParser并编写自己的语法行。

于 2014-04-10T07:53:50.963 回答
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中真的无关紧要。grp1parser

于 2014-04-10T20:50:44.593 回答