Python argparse如何控制打印输出的帮助文本中的空白字符?
解决argparse帮助文本自定义换行/空白格式的方案
问题根源
argparse 默认的帮助格式化器会自动将 help 字符串中的所有换行、连续空白压缩为单个空格,因此直接在 help 字符串中插入换行符不会生效。
解决方法
初始化 ArgumentParser 时指定 formatter_class 参数为 argparse.RawTextHelpFormatter,该格式化器会完全保留你在 help 字符串中定义的换行、缩进等空白格式。
修正后的代码示例
#! /usr/bin/python3 import argparse import json import sys def parseArgs(): """ To learn argparse. """ # 指定RawTextHelpFormatter保留自定义格式 parser = argparse.ArgumentParser(formatter_class=argparse.RawTextHelpFormatter) parser.add_argument('--json_args', required = False, nargs = '?', default = '{}', # 显式用\n控制换行,避免三重引号带来的多余缩进 help = "JSON-encapsulated key/value optargs\ne.g. {\"foo\": \"bar\"}" ) a, _ = parser.parse_known_args() j = json.loads(a.json_args) r = {} r['secret'] = 'open_sesame' for k, v in j.items(): r[k.lower()] = v return r def main(): args = parseArgs() print(json.dumps(args)) if __name__ == '__main__': try: main() except Exception as e: print(e) sys.exit(1)
修正后的--help输出效果
$ python3 ./a.py --help usage: a.py [-h] [--json_args [JSON_ARGS]] optional arguments: -h, --help show this help message and exit --json_args [JSON_ARGS] JSON-encapsulated key/value optargs e.g. {"foo": "bar"}
补充说明
- 如果你仅需要保留命令行整体描述、结尾说明文本的自定义格式,不需要修改参数 help 的格式,可以用
argparse.RawDescriptionHelpFormatter替代RawTextHelpFormatter。 - 使用三重引号定义多行 help 字符串时,注意不要引入代码层级的多余缩进,否则输出的帮助文本也会带有多余的前置空白。
内容的提问来源于stack exchange,提问作者StoneThrow
相关产品推荐
相关产品推荐

