可以在python中更改默认错误颜色吗?

时间:2019-02-11 03:58:45

标签: colors pip azure-cli colorama

运行python脚本或使用python构建的程序时,将以深红色发出错误。随着年龄的增长,对我来说,阅读起来变得越来越困难,以至于我不得不斜视,放大或大惊小怪的控制台属性和重新运行命令。

我真的不想更改控制台的默认设置,因为其他程序通常不会出现此问题,而且似乎是Python,它不支持主机控制台的颜色设置。我也提前不知道可能使用python构建了哪些程序(例如,Azure CLI)来提前设置颜色。

是否可以将python想要用于错误的DarkRed更改为更容易区分的颜色,例如“常规” Red?对于我的计算机上运行的任何py脚本或程序?

enter image description here

编辑:这是调用使用Python和深红色编写的程序的示例。我的py脚本库在我的工作计算机上。 enter image description here

EDIT2:其点是另一种使用深红色的点。 enter image description here

2 个答案:

答案 0 :(得分:2)

首先,python是无辜的。罪魁祸首是azure-cli本身。它使用名为knack的库来配置loggingknack使用colorama来配置彩色输出。

但是问题是RED中的colorama\033[31m。您会看到什么,有点像暗红色。

因此解决方案很简单,我们手动修改该knack软件包。

假设您的azure-cli安装在C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2

  1. 然后转到C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\Lib\site-packages,删除该knack目录或重命名。
  2. 转到https://github.com/Microsoft/knack,下载软件包。在第47行添加一行:
class _CustomStreamHandler(logging.StreamHandler):
    COLOR_MAP = None

    @classmethod
    def get_color_wrapper(cls, level):
        if not cls.COLOR_MAP:
            import colorama

            def _color_wrapper(color_marker):
                def wrap_msg_with_color(msg):
                    return '{}{}{}'.format(color_marker, msg, colorama.Style.RESET_ALL)
                return wrap_msg_with_color

            colorama.Fore.RED = "\033[31;1m"  # <- add this line
            cls.COLOR_MAP = {
                logging.CRITICAL: _color_wrapper(colorama.Fore.RED),
                logging.ERROR: _color_wrapper(colorama.Fore.RED),
                logging.WARNING: _color_wrapper(colorama.Fore.YELLOW),
                logging.INFO: _color_wrapper(colorama.Fore.GREEN),
                logging.DEBUG: _color_wrapper(colorama.Fore.CYAN)
            }

        return cls.COLOR_MAP.get(level, None)
    ...
  1. 将修改后的软件包复制到相应位置。
  2. 再次测试。
  3. 冰棒吧!

答案 1 :(得分:0)

特别是对于pip,有一个“ --no-color”命令行选项: https://pip.pypa.io/en/stable/reference/pip/#general-options