全局关闭 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
语句来抑制色彩,有没有办法在顶部全局关闭色彩脚本?
您可以暂时将 Fore
、Back
和 Style
命名空间替换为包含常量空字符串的命名空间。
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
命名空间;其他留作练习。
Python 的 colorama 非常适合修饰终端输出:
如您所见,这将添加 ANSI 代码并显示颜色,即使将日志记录模块用于标准输出也是如此。我正在使用这样的语句:
logging.info(f"{Fore.CYAN}Query received from {current_user.username}{Style.RESET_ALL}")
但是,如果我将日志记录模块指向一个文件,那么我会得到一大堆我显然不想要的 ANSI 代码。
如果打开记录到文件(或编写一个执行相同操作的日志记录函数),没有在任何地方编写 if
语句来抑制色彩,有没有办法在顶部全局关闭色彩脚本?
您可以暂时将 Fore
、Back
和 Style
命名空间替换为包含常量空字符串的命名空间。
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
命名空间;其他留作练习。