【问题标题】:How to avoid printing the default values (argparse) in the help message (-h, --help)如何避免在帮助消息 (-h, --help) 中打印默认值 (argparse)
【发布时间】:2021-07-02 07:16:24
【问题描述】:

这里是代码。

def main():
    parser = argparse.ArgumentParser(
        formatter_class=argparse.ArgumentDefaultsHelpFormatter,
        description="infomedia"
    )
    parser.add_argument("file", help="path to file")

    parser.add_argument(
        "-i",
        "--info",
        type=str,
        default="False",
        help="get information about",
    )

    cli_args = parser.parse_args()

    worker = Worker(
        cli_args.input,
        cli_args.info,
    )

    worker._application()

当程序使用 -h / --help 运行时,它会显示默认值。

positional arguments:
  file                  path to file

optional arguments:
  -h, --help            show this help message and exit
  -i INFO, --info INFO  get information about (default: False)

如何避免打印默认值?或者有没有办法以不同的方式定义这段代码的默认值?

【问题讨论】:

  • 你为什么使用formatter_class=argparse.ArgumentDefaultsHelpFormatter
  • @hpaulj 对不起。我认为它应该总是被定义。它在指南中,我将其添加到我的代码中。是这个问题吗?
  • 是的,它指定了另一种格式化程序,一种显示默认值的格式化程序。这在官方 python 参考中有解释。
  • 你想要默认的格式化程序:argparse.ArgumentParser(description="infomedia")docs.python.org/3/library/argparse.html#formatter-class

标签: python-3.x command-line-arguments argparse


【解决方案1】:

您可以创建从argparse.ArgumentDefaultsHelpFormatter 继承的新类并覆盖_get_help_string 方法,并将您新创建的类(在下面的示例中为MyHelpFormatter)作为formatter_classArgumentParser 构造函数中传递。以下是可以帮助您的示例代码:

import argparse

class MyHelpFormatter(argparse.ArgumentDefaultsHelpFormatter):
    def _get_help_string(self, action):
        return action.help

def main():
    parser = argparse.ArgumentParser(
        formatter_class=MyHelpFormatter,
        description="infomedia",
    )
    parser.add_argument("file", help="path to file")

    parser.add_argument(
        "-i",
        "--info",
        type=str,
        default="False",
        help="get information about",
    )

    cli_args = parser.parse_args()

if __name__ == "__main__":
    main()

【讨论】:

  • 这是一种将行为恢复为默认 HelpFormatter 的方法。为什么不直接省略那个参数呢? parser = argparse.ArgumentParser(description="infomedia").
【解决方案2】:

我想你想要更多:

parser.add_argument("--info", help="get information", action="store_true")

【讨论】:

  • 此时,在命令行中指定 --info 会将 parse_args().info 设置为 boolean True。如果您需要将其作为字符串,则可以使用 str(parse_args().info) 进行转换
猜你喜欢
  • 2018-10-05
  • 1970-01-01
  • 2021-09-16
  • 2022-01-04
  • 2012-08-22
  • 1970-01-01
  • 2016-06-21
  • 2014-10-07
  • 2019-11-25
相关资源
最近更新 更多