Python argparse: 预格式化帮助文本?
我正在使用argparse这个工具,想在我的某个选项的帮助信息中显示一个列表。不过,argparse会把换行符去掉,把所有内容都显示在一行上。
有没有办法告诉argparse,这段帮助信息是预先格式化好的,不要去掉换行符呢?
2 个回答
3
如果你只是想修改一个选项的帮助信息,那就不能用 RawTextHelpFormatter
。相反,你需要创建一个 HelpFormatter
的子类,并为那些需要“原始”处理的选项提供一个特别的介绍(我用的是 "R|后面的帮助信息"
):
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 还支持将默认值添加到所有选项,以及原始输入的工具描述。
7
来自文档的内容:
RawTextHelpFormatter会保留所有帮助文本中的空格,包括参数描述。
from argparse import RawTextHelpFormatter
parser = ArgumentParser(description='test', formatter_class=RawTextHelpFormatter)