我正在使用 argparse,我想在我的一个选项的帮助文本中显示一个列表。但是,argparse 从文本中删除新行并将其显示在单行上。
无论如何告诉 argparse 帮助字符串是预先格式化的,而不是去除换行符?
从文档:
RawTextHelpFormatter 为各种帮助文本(包括参数描述)维护空格。
from argparse import RawTextHelpFormatter
parser = ArgumentParser(description='test', formatter_class=RawTextHelpFormatter)
如果您只想覆盖一个选项,则不能使用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 还支持将默认值添加到所有选项,以及实用程序描述的原始输入。