我正在使用argparse,我想在其中一个选项的帮助文本中显示一个列表。但是,argparse从文本中删除新行并将其显示在一行上。
有没有告诉argparse帮助字符串已预先格式化,而不是去除换行字符?
答案 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还支持添加 所有选项的默认值,以及实用程序说明的原始输入。