带有 ArgumentDefaultsHelpFormatter 和 RawTextHelpFormatter 的 Python Argparse

Ala*_*lan 3 python argparse

我将 argparse 与 Python 2.7 一起使用,我想用它来RawTextHelpFormatter获取 Epilog 中的换行符 ArgumentDefaultsHelpFormatter获取默认帮助中显示的默认值。

例如,如果 ArgumentParser 的 Epilog 部分是:

 epilog="first line\n second line"
Run Code Online (Sandbox Code Playgroud)

并且有争论:

 epilog="first line\n second line"
Run Code Online (Sandbox Code Playgroud)

帮助输出应该是:

   -d, --development   Build development code (default: False)
   -p, --production    Build production release (default: False)
first line
second line
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?

Big*_*gsy 8

在帮助中插入您自己的默认值可以工作,但并不理想。这是因为这是不必要的维护负担,原因如下:

  • 每个新参数都需要添加该文本

  • 所有这些重复都会使代码变得混乱,从而模糊了重要的细节

  • 未来的设计更改(例如不再显示默认值)将需要从每个参数中删除该文本

  • 高级功能,例如是否显示默认值,用户可配置的选项将被默认文本的硬编码排除

因此,最好利用 python 的多重继承来创建一个具有所有相关提供的格式化程序功能的新格式化程序,在本例中为 RawTextHelpFormatter 和 ArgumentDefaultsHelpFormatter,例如如下所示:

import argparse


class UltimateHelpFormatter(
    argparse.RawTextHelpFormatter, argparse.ArgumentDefaultsHelpFormatter
):
    pass


group = argparse.ArgumentParser(
    epilog="first line\n second line",
    formatter_class=UltimateHelpFormatter,
)
group.add_argument(
    "-d",
    "--development",
    action="store_true",
    dest="build_dev",
    default="False",
    help="Build development code",
)
group.add_argument(
    "-p",
    "--production",
    action="store_true",
    dest="build_prod",
    default="False",
    help="Build production release",
)
group.print_help()
Run Code Online (Sandbox Code Playgroud)

上面给出了这个输出:

usage: prog.py [-h] [-d] [-p]

optional arguments:
  -h, --help         show this help message and exit
  -d, --development  Build development code (default: False)
  -p, --production   Build production release (default: False)

first line
 second line
Run Code Online (Sandbox Code Playgroud)