使用argparse折叠多个选项

时间:2013-02-25 17:06:07

标签: python argparse

我正在寻找一种优雅的方法来折叠布尔切换的帮助消息 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.

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

2 个答案:

答案 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并不重要。