【发布时间】:2021-12-27 00:26:30
【问题描述】:
我在脚本中添加了一些 args,其中 argparse 功能正常。现在我正在尝试格式化--help 输出。我已将metavar='' 添加到每个产生更清晰输出的输出中,但是在单个标志之后有空格使文本变得奇怪。
问题
标志将显示为-m , --model 而不是-m, --model
带有type=bool 和const 和nargs 的标志显示为-x [], --xip [],添加了额外的空间和[]。
没有找到太多关于如何清理它的信息。确实在 python.org 上发现了关于额外空间是一个已知问题并且使用 metavar='' 并不理想的讨论。
示例代码:
import argparse
import colorama
from colorama import init, Fore, Style
init(autoreset=True)
parser = argparse.ArgumentParser(description=Fore.RED + 'Some descriptive Text and such' + Fore.WHITE, formatter_class=argparse.ArgumentDefaultsHelpFormatter)
add_arg = parser.add_argument
add_arg('-m', '--model', type=str, default='model_name', help="some help text", metavar='')
add_arg('-d', '--derp', type=str, default='burp', help="some more help text", metavar='')
add_arg('-x', '--xip', type=bool, default=False, const=True, nargs='?', help="some other help text", metavar='')
args = parser.parse_args()
运行 python script.py -h 产生:
usage: script.py [-h] [-m] [-d] [-x ]
Some descriptive Text and such # <-- this line displays as RED
optional arguments:
-h, --help show this help message and exit
-m , --model some help text (default: model_name)
-d , --derp some more help text (default: burp)
-x [], --xip [] some other help text (default: False)
将 metavar 更改为 metavar='\b' 会产生以下结果:
usage: script.py [-h] [-m] [-d] [-x ]] # <- extra bracket ]
Some descriptive Text and such
optional arguments:
-h, --help show this help message and exit
-m, --model some help text (default: model_name) # indent broken
-d, --derp some more help text (default: burp) # indent broken
-x ], --xip ] some other help text (default: False) # indent broken
着色输出
我还想知道如何使用 colorama 正确着色 --help 输出。为描述着色很容易,但是尝试为标志添加颜色会产生预期的错误。如果之前添加了颜色以帮助工作,例如help=Fore.YELLOW + 'some help text',但它会为它之后的所有内容着色,并且不能在它之后添加 anymroe Fore 而不会出现错误。将它添加到其他任何地方都会产生错误。
有没有办法定义如何为标志和帮助文本着色,可能在设置它们的位置之外?
除此之外,是否有任何用于 argparse 格式化的包?我发现一些旧的不太正常,但没有什么新东西。
【问题讨论】:
-
尝试
metavar='\b'删除空格...不太喜欢花时间格式化argparse帮助。 -
@Bakuriu 这删除了空格,但它也破坏了帮助文本上的缩进(就像在文本之前删除了一个选项卡)。但是,对于带有
const和nargs的args,它留下了空格并取出了左括号,也破坏了帮助文本的对齐方式。我将编辑我的帖子以显示发生了什么。 -
您可以继承HelpFormatter,并修改相关方法。您无法使用现有参数来使此显示“更清晰”。
-
不要使用
type=bool。产生False的唯一字符串是bool(''),您的用户无法提供。
标签: python formatting argparse flags colorama