Python argparse:有没有办法控制帮助文本的空白? [复制]

Posted

技术标签:

【中文标题】Python argparse:有没有办法控制帮助文本的空白? [复制]【英文标题】:Python argparse: Is there a way to control the whitespace of the help text? [duplicate] 【发布时间】:2022-01-02 10:05:56 【问题描述】:

有没有办法控制argparse 打印到标准输出的帮助文本的空白?

https://docs.python.org/3/howto/argparse.html 上的示例帮助文本都很短,我找不到任何描述如何处理长字符串格式的措辞。

唯一想到的是“\n”——但根据我的尝试,这似乎被彻底剥夺了:

#! /usr/bin/python3

import argparse
import json

def parseArgs():
    """
    To learn argparse.
    """
    parser = argparse.ArgumentParser()
    parser.add_argument('--json_args', required = False, nargs = '?',
                        default = '',
                        help = """JSON-encapsulated key/value optargs\n
                        e.g. "foo": "bar"
                        """
                        )
    a, _ = parser.parse_known_args()
    j = json.loads(a.json_args)
    r = 
    r['secret'] = 'open_sesame'

    for k, v in j.items():
        r[k.lower()] = v

    return r

def main():
    args = parseArgs()
    print(json.dumps(args))

if __name__ == '__main__':
    try:
        main()
    except Exception as e:
        print(e)
        sys.exit(1)
$ python3 ./a.py --help
usage: a.py [-h] [--json_args [JSON_ARGS]]

optional arguments:
  -h, --help            show this help message and exit
  --json_args [JSON_ARGS]
                        JSON-encapsulated key/value optargs e.g. "foo":
                        "bar"

【问题讨论】:

见docs.python.org/3/library/… 有几个raw 格式化程序。还有一个最后的格式化步骤可以去除多余的 nl。 这可能也有帮助,***.com/questions/46554084/… 【参考方案1】:

你可以覆盖HelpFormatter:

import argparse


class CustomHelpFormatter(argparse.ArgumentDefaultsHelpFormatter):
    def __init__(self, *args, **kwargs):
        kwargs["max_help_position"] = 30  # default to 24
        kwargs["width"] = 80  # default to _shutil.get_terminal_size().columns
        super().__init__(*args, **kwargs)



parser = argparse.ArgumentParser(formatter_class=CustomHelpFormatter)
parser.add_argument(
    "--json_args",
    required=False,
    nargs="?",
    default="",
    help='JSON-encapsulated key/value optargs e.g. "foo": "bar"',
)


parser.print_help()

这给出了结果:

usage: arg.py [-h] [--json_args [JSON_ARGS]]

optional arguments:
  -h, --help               show this help message and exit
  --json_args [JSON_ARGS]  JSON-encapsulated key/value optargs e.g. "foo":
                           "bar" (default: )

但要小心,根据 python 来源:

class HelpFormatter(object):
    """Formatter for generating usage messages and argument help strings.

    Only the name of this class is considered a public API. All the methods
    provided by the class are considered an implementation detail.
    """

【讨论】:

以上是关于Python argparse:有没有办法控制帮助文本的空白? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

在没有任何参数的情况下调用脚本时使用 Python argparse 显示帮助消息

python - 如何将python argparse与sys.argv以外的args一起使用?

python之argparse 模块

如何获取argparse的帮助内容,而不是打印到控制台

Python:argparse 帮助文本的分页?

python argparse命名位置参数?