argparse:在“--help”中包括默认值和类型

3

现在我正在使用这个:

parser = argparse.ArgumentParser(description='Run the Foo',
    formatter_class=argparse.ArgumentDefaultsHelpFormatter)

以下是默认值的输出结果:

--install-only        Do not run benchmark or verification, just install and
                      exit (default: False)

有没有一种简单的方法可以使它(也就是代码)打印出类型,像这样:
--install-only        Do not run benchmark or verification, just install and
                      exit (default: False) (type: Boolean)
2个回答

4
你可以自己制作一个 HelpFormatter 类,灵感来自于 argparse.py 中包含的类:
class DefaultsAndTypesHelpFormatter(argparse.HelpFormatter):
    def _get_help_string(self, action):
        help = action.help
        if '%(default)' not in action.help:
            if action.default is not argparse.SUPPRESS:
                defaulting_nargs = [argparse.OPTIONAL, argparse.ZERO_OR_MORE]
                if action.option_strings or action.nargs in defaulting_nargs:
                    help += ' (default: %(default)s)'
                if action.type:
                    help += ' (type: %(type)s)'
        return help

这将大部分满足您的需求,但请注意,它不会打印action='store_true'的类型。我认为这没问题,因为(default: False)已经很清楚了,但如果您想更加明确,可以添加一个类似于if isinstance(action, argparse._StoreTrueAction)的子句并添加您需要的任何内容。


1
< p > ArgumentDefaultsHelpFormatter 只是在所有参数帮助行中添加了一个 %(default)s 字符串。你也可以自己添加。你还可以添加一个 %(type)s 字符串。

p=argparse.ArgumentParser()
p.add_argument('--install-only',type=int,help='default %(default)s, type %(type)s')
p.print_help()

生成:
usage: ipython [-h] [--install-only INSTALL_ONLY]

optional arguments:
  -h, --help            show this help message and exit
  --install-only INSTALL_ONLY
                        default None, type int

请注意,type通常是一个函数,例如intfloatNone(这是默认的“字符串”类型)。除非您编写了将字符串转换为True/False值的函数,否则不存在Boolean type。对于store_true参数,typeNone

action参数通常是一个字符串,但它会被转换为Action子类,而不是Action本身的属性。因此,%(action)s将无效。

因此,虽然在帮助行中显示type属性是可能的,但我认为它的价值有限。通过在帮助字符串中明确包含该信息,您将拥有更大的控制权。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接