gpt4 book ai didi

python-3.x - 如果发生错误,如何在 python 中使用 argparse 输出颜色?

转载 作者:行者123 更新时间:2023-12-02 18:48:31 26 4
gpt4 key购买 nike

有没有办法让argparse输出红色或橙色的错误或警告?

我知道有一些操作系统标准颜色可以直接使用,例如“\033[38;5;196m”(类似红色)或“\033[38;5;208m”(类似橙色),但是有没有办法在 argparse 中使用它们或类似的东西?不同颜色的消息确实有助于人们识别是否发生了任何事情。

最佳答案

我只是想到了同样的问题,并决定研究 argparse 模块,因为输出有点奇怪(在 Linux 上,单词“error”和“usage”通常大写,我也希望打印错误在我的程序中以粗体红色显示,包括检查命令行参数时。)这是我的一些看起来更漂亮的输出的代码,使用 Python 3.6.3 进行了测试(我实际上只是在这里包含了更多颜色作为示例,在实践中你应该只需要用粗体红色表示错误)。

import argparse
import sys
from gettext import gettext

class ColoredArgParser(argparse.ArgumentParser):

# color_dict is a class attribute, here we avoid compatibility
# issues by attempting to override the __init__ method
# RED : Error, GREEN : Okay, YELLOW : Warning, Blue: Help/Info
color_dict = {'RED' : '1;31', 'GREEN' : '1;32',
'YELLOW' : '1;33', 'BLUE' : '1;36'}

def print_usage(self, file = None):
if file is None:
file = sys.stdout
self._print_message(self.format_usage()[0].upper() +
self.format_usage()[1:],
file, self.color_dict['YELLOW'])

def print_help(self, file = None):
if file is None:
file = sys.stdout
self._print_message(self.format_help()[0].upper() +
self.format_help()[1:],
file, self.color_dict['BLUE'])

def _print_message(self, message, file = None, color = None):
if message:
if file is None:
file = sys.stderr
# Print messages in bold, colored text if color is given.
if color is None:
file.write(message)
else:
# \x1b[ is the ANSI Control Sequence Introducer (CSI)
file.write('\x1b[' + color + 'm' + message.strip() + '\x1b[0m\n')

def exit(self, status = 0, message = None):
if message:
self._print_message(message, sys.stderr, self.color_dict['RED'])
sys.exit(status)

def error(self, message):
self.print_usage(sys.stderr)
args = {'prog' : self.prog, 'message': message}
self.exit(2, gettext('%(prog)s: Error: %(message)s\n') % args)

关于python-3.x - 如果发生错误,如何在 python 中使用 argparse 输出颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47155189/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com