抑制 argparse 中的重复条目生成 'help' 文本

Supress duplicate entries in argaparse generated 'help' text

我的问题是关于在使用 -h 参数显示帮助时如何抑制或更改 argaparse 输出中的一些自动生成的文本。我遇到的问题是出现了一些不需要的和重复的条目。我在这里提问的原因是我无法在 Python 和 argaparse 文档中找到解释,向我解释为什么会出现此文本以及如何摆脱它。

我有一个名为“sbucalc”的小脚本,其中包含以下代码行:

parser=argparse.ArgumentParser('calculates the NWO initial grant and the RCCS credits for a given amount of SBU', usage='sbucalc [-h][--nwo INITIAL PERCENT] [--rccs SBU RATE]')
parser.add_argument('--nwo', nargs='+', help='--nwo INITIAL_GRANT [PERCENT] default=10')
parser.add_argument('--rccs', nargs='+',  help='--rccs SBU [RATE] default=1.14')
parser.print_help

执行sbucalc -h得到的结果是:

usage: calculates the NWO initial grant and the RCCS credits for a given amount of SBU [-h][--nwo INITIAL PERCENT] [--rccs SBU RATE]

optional arguments:
  -h, --help            show this help message and exit
  --nwo NWO [NWO ...]   --nwo INITIAL_GRANT [PERCENT] default=10
  --rccs RCCS [RCCS ...]
                        --rccs SBU [RATE] default=1.14

我似乎没有找到一种方法来抑制 --nwo NWO [NWO...] 的这些第一个实例,期望的结果应该是:

usage: calculates the NWO initial grant and the RCCS credits for a given amount of SBU [-h][--nwo INITIAL PERCENT] [--rccs SBU RATE]

optional arguments:
  -h, --help            show this help message and exit
  --nwo INITIAL_GRANT [PERCENT] default=10
  --rccs SBU [RATE] default=1.14

有办法实现吗?

P.D.: I understand why the term "help" cannot be used in the title, but when your question is about the freakin' output of the help message, this restriction is not really something that you want to have.

您似乎在寻找类似的东西

import argparse

parser=argparse.ArgumentParser(
    description='calculates the NWO initial grant and the RCCS credits for a given amount of SBU',
    usage='sbucalc [-h] [--nwo INITIAL PERCENT] [--rccs SBU RATE]')
parser.add_argument(
    '--nwo', dest='initial_grant', nargs=1, help='[PERCENT] default=10')
parser.add_argument(
    '--rccs', dest='sbu', nargs=1, help='[RATE] default=1.14')
parser.print_help()

这导致

usage: sbucalc [-h] [--nwo INITIAL PERCENT] [--rccs SBU RATE]

calculates the NWO initial grant and the RCCS credits for a given amount of
SBU

optional arguments:
  -h, --help           show this help message and exit
  --nwo INITIAL_GRANT  [PERCENT] default=10
  --rccs SBU           [RATE] default=1.14

注意变量的命名方式,以便帮助消息包含您所说的描述性名称,以及我如何将 nargs='+' - 显然您在这里并不真正想要 - 更改为 nargs=1 将选项标记为非可选。 (这是矛盾的,通常应该避免。如果参数不是可选的,则将其设为必需的参数,尽管可以使用 alternatively 将其指定为选项的工具。nargs='?' 这样做。)

哦,我添加了缺少的 description 关键字以在输出中包含描述。

...虽然如果你真的想要默认值,这些选项不应该是强制性的,你应该使用 default 关键字来指定实际的默认值。

parser=argparse.ArgumentParser(
    description='calculates the NWO initial grant and the RCCS credits for a given amount of SBU',
    usage='sbucalc [options]',
    formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument(
    '--nwo', dest='initial_grant', default=10, help='[PERCENT]')
parser.add_argument(
    '--rccs', dest='sbu', default=1.14, help='[RATE]')

打印

usage: sbucalc [-h] [options]

calculates the NWO initial grant and the RCCS credits for a given amount of
SBU

optional arguments:
  -h, --help           show this help message and exit
  --nwo INITIAL_GRANT  [PERCENT] (default: 10)
  --rccs SBU           [RATE] (default: 1.14)

(另请注意初始化程序的 formatter_class 参数。)

usage 消息中指定选项实际上只是增加了更多的重复并造成了另一个维护麻烦;更好的约定是让用户参考下面列出的选项,并保留一个简单的 usage='sbucalc [options]' 或类似的东西,就像我在这里做的那样。

(最后,还要注意您是如何忘记 print_help() 函数调用周围的括号的。)