仅将原始格式应用于epilog,而不应用于解析器和参数组描述

时间:2017-05-30 19:41:40

标签: python argparse

我已经使用argparse定义了我的程序的命令行界面,我想通过epilog提供一些示例。默认情况下,argparse模块会删除额外的空格,包装描述文本等。此默认行为对于程序的描述和参数组描述非常有用,但对于epilog我想要提供解析器不应修改的预格式化字符串。如果我指定formatter_class=RawDescriptionHelpFormatter,这将为epilog提供所需的行为,但我失去了我依赖的程序和参数组描述的默认行为。我可以回去手动修复这些描述的包装,但这很乏味。

有没有办法将原始格式 应用到epilog?

1 个答案:

答案 0 :(得分:0)

此格式化工具更改了一种方法_fill_text

class RawDescriptionHelpFormatter(HelpFormatter):
    ....
    def _fill_text(self, text, width, indent):
        return ''.join(indent + line for line in text.splitlines(keepends=True))

这会处理text方法中定义为format_help的任何内容的换行

def format_help(self):
    formatter = self._get_formatter()

    # usage
    formatter.add_usage(self.usage, self._actions,
                        self._mutually_exclusive_groups)

    # description
    formatter.add_text(self.description)

    # positionals, optionals and user-defined groups
    for action_group in self._action_groups:
        formatter.start_section(action_group.title)
        formatter.add_text(action_group.description)
        formatter.add_arguments(action_group._group_actions)
        formatter.end_section()

    # epilog
    formatter.add_text(self.epilog)

    # determine help from format above
    return formatter.format_help()

descriptiongroup.descriptionepilog

我可以想象创建一个替代的Formatter子类,它只改变了epilog的包装(可能由一些关键词识别)。但我会把它作为读者的练习。 :)