argparse:包含默认值并输入'--help'

时间:2014-10-21 05:07:07

标签: python argparse

现在我正在使用它:

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 个答案:

答案 0 :(得分:1)

您可以制作自己的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 :(得分:1)

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(这是默认的'字符串'类型)。没有Boolean type - 除非您编写了将字符串转换为True / False值的函数。对于store_true操作,typeNone

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

因此虽然可以在帮助热线中显示type属性,但我认为它的价值有限。只需在帮助字符串中明确包含该信息,您就可以获得更大的控制权。