python - 从输出日志文件中排除 ANSI 转义序列

标签 python

我已经设置了一类颜色,使标准输出在出现警告时更易于阅读。我还想将所有打印语句写入日志文件。

# Colour set up
class colours:
    warning = '\033[93m'
    colour1 = '\033[94m'
    colour2 = '\033[1m'
    terminate = '\033[0m'

# Logger set up
class Logger(object):
    def __init__(self):
        self.terminal = sys.stdout
        self.log = open(“output.log”, "a")

    def write(self, message):
        self.terminal.write(message)
        self.log.write(message)

sys.stdout = Logger()

# Example
print colours.warning + ‘WARNING!’ + colours.terminate

*in colour*:$ WARNING!

*in output.log*: [93mWARNING!

有没有什么方法可以写入也会为 output.log 文件着色的字符,或者以彩色打印到标准输出但不在日志文件中包含“[94m”?为了方便用户,我不想要求安装任何非本地 python 包。

最佳答案

使用像 \x1b\[[0-9;]*m 这样的正则表达式在写入 output.log 对象时去除 ANSI 代码?

import re

ansi_re = re.compile(r'\x1b\[[0-9;]*m')

# ...

self.log.write(re.sub(ansi_re, '', message))

关于python - 从输出日志文件中排除 ANSI 转义序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48782529/

相关文章:

python - self 在 python 类中处于哪个位置?

python - 简单有效的网络框架

python - tp_clear、tp_dealloc 和 tp_free 之间有什么区别?

python - 如何批量上传数据到appengine datastore?旧方法不起作用

python - 如何使用字典理解有条件地替换键

python - VS 代码中的外部终端调试器

python - 无法创建 Dataproc 集群

python - 0x88 棋盘表示

python - 使用 Django-Angular 对 View 进行 AJAX 调用

javascript - RSA - PyCrypto 和 Javascript RSA 库 (PidCrypt) 编码问题