Python argparse:有没有办法控制帮助文本的空白? [复制]
Posted
技术标签:
【中文标题】Python argparse:有没有办法控制帮助文本的空白? [复制]【英文标题】:Python argparse: Is there a way to control the whitespace of the help text? [duplicate] 【发布时间】:2022-01-02 10:05:56 【问题描述】:有没有办法控制argparse
打印到标准输出的帮助文本的空白?
https://docs.python.org/3/howto/argparse.html 上的示例帮助文本都很短,我找不到任何描述如何处理长字符串格式的措辞。
唯一想到的是“\n
”——但根据我的尝试,这似乎被彻底剥夺了:
#! /usr/bin/python3
import argparse
import json
def parseArgs():
"""
To learn argparse.
"""
parser = argparse.ArgumentParser()
parser.add_argument('--json_args', required = False, nargs = '?',
default = '',
help = """JSON-encapsulated key/value optargs\n
e.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)
$ 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"
【问题讨论】:
见docs.python.org/3/library/… 有几个raw
格式化程序。还有一个最后的格式化步骤可以去除多余的 nl。
这可能也有帮助,***.com/questions/46554084/…
【参考方案1】:
你可以覆盖HelpFormatter
:
import argparse
class CustomHelpFormatter(argparse.ArgumentDefaultsHelpFormatter):
def __init__(self, *args, **kwargs):
kwargs["max_help_position"] = 30 # default to 24
kwargs["width"] = 80 # default to _shutil.get_terminal_size().columns
super().__init__(*args, **kwargs)
parser = argparse.ArgumentParser(formatter_class=CustomHelpFormatter)
parser.add_argument(
"--json_args",
required=False,
nargs="?",
default="",
help='JSON-encapsulated key/value optargs e.g. "foo": "bar"',
)
parser.print_help()
这给出了结果:
usage: arg.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" (default: )
但要小心,根据 python 来源:
class HelpFormatter(object):
"""Formatter for generating usage messages and argument help strings.
Only the name of this class is considered a public API. All the methods
provided by the class are considered an implementation detail.
"""
【讨论】:
以上是关于Python argparse:有没有办法控制帮助文本的空白? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
在没有任何参数的情况下调用脚本时使用 Python argparse 显示帮助消息