6

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

无论如何告诉 argparse 帮助字符串是预先格式化的,而不是去除换行符?

4

2 回答 2

7

文档

RawTextHelpFormatter 为各种帮助文本(包括参数描述)维护空格。

from argparse import RawTextHelpFormatter
parser = ArgumentParser(description='test', formatter_class=RawTextHelpFormatter)
于 2010-12-07T10:05:36.683 回答
3

如果您只想覆盖一个选项,则不能使用RawTextHelpFormatter. 相反,子类化HelpFormatter并为应该“原始”处理的选项提供一个特殊的介绍(我使用"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|都将被正常包装。

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

于 2014-03-03T20:57:48.397 回答