gpt4 book ai didi

python - 删除 ANSI 颜色代码时打印到 STDOUT 和日志文件

转载 作者:太空狗 更新时间:2023-10-29 21:20:28 26 4
gpt4 key购买 nike

我有以下功能可以为我的屏幕消息着色:

def error(string):
return '\033[31;1m' + string + '\033[0m'

def standout(string):
return '\033[34;1m' + string + '\033[0m'

我按如下方式使用它们:

print error('There was a problem with the program')
print "This is normal " + standout("and this stands out")

我想将输出记录到一个没有 ANSI 颜色代码的文件(除了 STDOUT 之外),希望不必在每个 print 语句中添加第二个“记录”行。

原因是,如果您只是简单地 python program.py > out,那么文件 out 将具有 ANSI 颜色代码,如果您以普通格式打开,这看起来很糟糕文本编辑器。

有什么建议吗?

最佳答案

sys.stdout.isatty 函数可能会有所帮助:

from sys import stdout

def error(string, is_tty=stdout.isatty()):
return ('\033[31;1m' + string + '\033[0m') if is_tty else string

def standout(string, is_tty=stdout.isatty()):
return ('\033[34;1m' + string + '\033[0m') if is_tty else string

这实际上是我能想到的使用未设置为 None 的默认参数的少数用途之一,因为默认参数在 Python 中是在编译时计算的,而不是像 C++ 中那样在运行时计算...

如果您确实需要,也可以显式覆盖该行为,尽管这不会让您在重定向时操作 stdout 本身。您有什么理由不使用 logging 模块(也许您不知道)?

关于python - 删除 ANSI 颜色代码时打印到 STDOUT 和日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2893650/

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