如何在 argparse 帮助文本中插入换行符?

新手上路,请多包涵

在 Python 2.7 中使用 argparse 来解析输入选项。我的选择之一是多项选择。我想在它的帮助文本中列出一个列表,例如

from argparse import ArgumentParser

parser = ArgumentParser(description='test')

parser.add_argument('-g', choices=['a', 'b', 'g', 'd', 'e'], default='a',
    help="Some option, where\n"
         " a = alpha\n"
         " b = beta\n"
         " g = gamma\n"
         " d = delta\n"
         " e = epsilon")

parser.parse_args()

但是, argparse 所有换行符和连续空格。结果看起来像

~/下载:52$ python2.7 x.py -h
用法:x.py [-h] [-g {a,b,g,d,e}]

测试

可选参数:
  -h, --help 显示此帮助信息并退出
  -g {a,b,g,d,e} 一些选项,其中 a = alpha b = beta g = gamma d = delta e
                  = epsilon

如何在帮助文本中插入换行符?

原文由 kennytm 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

尝试使用 RawTextHelpFormatter 来保留所有格式:

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

它类似于 RawDescriptionHelpFormatter 但不仅适用于描述和结尾, RawTextHelpFormatter 还适用于所有帮助文本(包括参数)。

原文由 Michał Kwiatkowski 发布,翻译遵循 CC BY-SA 4.0 许可协议

如果您只想覆盖一个选项,则不应使用 RawTextHelpFormatter 。相反,将 HelpFormatter 子类化,并为应该“原始”处理的选项提供一个特殊的介绍(我使用 "R|rest of help" ):

 import argparse

class SmartFormatter(argparse.HelpFormatter):

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

并使用它:

 from argparse import ArgumentParser

parser = ArgumentParser(description='test', formatter_class=SmartFormatter)

parser.add_argument('-g', choices=['a', 'b', 'g', 'd', 'e'], default='a',
    help="R|Some option, where\n"
         " a = alpha\n"
         " b = beta\n"
         " g = gamma\n"
         " d = delta\n"
         " e = epsilon")

parser.parse_args()

.add_argument() 的任何其他调用(其中帮助不以 R| 将被正常包装。

这是 我对 argparse 的改进 的一部分。完整的 SmartFormatter 还支持将默认值添加到所有选项,以及实用程序描述的原始输入。完整版有自己的 _split_lines 方法,因此保留对例如版本字符串所做的任何格式化:

 parser.add_argument('--version', '-v', action="version",
                    version="version...\n   42!")

原文由 Anthon 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题