全局关闭 Colorama 颜色代码

Globally turn off Colorama colour codes

Python 的 colorama 非常适合修饰终端输出:

如您所见,这将添加 ANSI 代码并显示颜色,即使将日志记录模块用于标准输出也是如此。我正在使用这样的语句:

logging.info(f"{Fore.CYAN}Query received from {current_user.username}{Style.RESET_ALL}")

但是,如果我将日志记录模块指向一个文件,那么我会得到一大堆我显然不想要的 ANSI 代码。

如果打开记录到文件(或编写一个执行相同操作的日志记录函数),没有在任何地方编写 if 语句来抑制色彩,有没有办法在顶部全局关闭色彩脚本?

您可以暂时将 ForeBackStyle 命名空间替换为包含常量空字符串的命名空间。

class DummyFore:
    BLACK=RED=GREEN=YELLOW=BLUE=MAGENTA=CYAN=WHITE=RESET=''

saved_Fore, Fore = Fore, DummyFore

logging.info(f"{Fore.CYAN}Query received from {current_user.username}{Style.RESET_ALL}") # should insert empty strings for the colour codes
Fore = saved_Fore
del saved_Fore # just to be thorough

在上下文管理器中包装保存-恢复逻辑也应该有效:

@contextlib.contextmanager
def without_colorama():
    global Fore
    saved_Fore, Fore = Fore, DummyFore
    yield
    Fore = saved_Fore
    # since saved_Fore is now a local, no need to `del`

with without_colorama():
    logging.info(f"{Fore.CYAN}Query received from {current_user.username}{Style.RESET_ALL}")

在所有示例代码中,我只处理了 Fore 命名空间;其他留作练习。