gpt4 book ai didi

带有 ArgumentDefaultsHelpFormatter 和 RawTextHelpFormatter 的 Python Argparse

转载 作者:行者123 更新时间:2023-12-05 03:54:03 28 4
gpt4 key购买 nike

我在 Python 2.7 中使用 argparse我想使用 RawTextHelpFormatter 在 epilog 中获取换行符 ArgumentDefaultsHelpFormatter 获取默认帮助中显示的默认值。

例如,如果 ArgumentParser 的结尾部分是:

 epilog="first line\n second line"

并且有参数:

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",
)

帮助输出应该是:

   -d, --development   Build development code (default: False)
-p, --production Build production release (default: False)
first line
second line

有办法吗?

最佳答案

在帮助中插入您自己的默认设置是可行的,但并不理想。这是因为它是一个不必要的维护负担,原因如下:

  • 每个新论点都需要添加该文本

  • 所有这些重复使代码变得困惑,模糊了重要的细节

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

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

因此,最好利用 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()

上面给出了这个输出:

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

关于带有 ArgumentDefaultsHelpFormatter 和 RawTextHelpFormatter 的 Python Argparse,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61324536/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com