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

时间:2010-12-07 09:55:52

标签: python argparse

我正在使用argparse,我想在其中一个选项的帮助文本中显示一个列表。但是,argparse从文本中删除新行并将其显示在一行上。

有没有告诉argparse帮助字符串已预先格式化,而不是去除换行字符?

2 个答案:

答案 0 :(得分:5)

来自docs

  

RawTextHelpFormatter维护   各种帮助文本的空白   包括参数描述。

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

答案 1 :(得分:3)

如果您只想覆盖一个选项,则无法使用RawTextHelpFormatter。取而代之的是HelpFormatter的子类,并为应该处理“raw”的选项提供特殊的介绍(我使用"R|rest of help"):

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|开头的请求将正常处理。

这是my improvements on argparse的一部分。完整的SmartFormatter还支持添加 所有选项的默认值,以及实用程序说明的原始输入。