Python argparse: 预格式化帮助文本?

6 投票
2 回答
4027 浏览
提问于 2025-04-16 08:10

我正在使用argparse这个工具,想在我的某个选项的帮助信息中显示一个列表。不过,argparse会把换行符去掉,把所有内容都显示在一行上。

有没有办法告诉argparse,这段帮助信息是预先格式化好的,不要去掉换行符呢?

2 个回答

3

如果你只是想修改一个选项的帮助信息,那就不能用 RawTextHelpFormatter。相反,你需要创建一个 HelpFormatter 的子类,并为那些需要“原始”处理的选项提供一个特别的介绍(我用的是 "R|后面的帮助信息"):

import argparse

class SmartFormatter(argparse.HelpFormatter):

    def _split_lines(self, text, width):
        # this is the RawTextHelpFormatter._split_lines
        if text.startswith('R|'):
            return text[2:].splitlines()  
        return argparse.HelpFormatter._split_lines(self, text, width)

然后使用它:

from argparse import ArgumentParser
from textwrap import dedent

parser = ArgumentParser(description='test')

parser.add_argument('--list', help=dedent("""\
    R|abc
      def
        ghi
"""))
parser.parse_args()

任何其他调用 .add_argument() 的地方,如果帮助信息不以 R| 开头,就会像平常一样处理。

这是我对 argparse 的改进的一部分。完整的 SmartFormatter 还支持将默认值添加到所有选项,以及原始输入的工具描述。

7

来自文档的内容:

RawTextHelpFormatter会保留所有帮助文本中的空格,包括参数描述。

from argparse import RawTextHelpFormatter
parser = ArgumentParser(description='test', formatter_class=RawTextHelpFormatter)

撰写回答