ST意法半导体
直播中

石胜厚

8年用户 1142经验值
私信 关注
[问答]

搞SD卡log打印功能时,打印出来的每条指令后面不知道为啥会带[0m后缀?

搞SD卡log打印功能时,打印出来的每条指令后面不知道为啥会带[0m后缀,如图所示:



哪位大佬教一下怎么去

回帖(2)

陈丹丽

2025-3-12 15:55:15
那是串口工具的显色代码。
在打印控制宏定义elog_i宏定义里面
举报

h1654155275.5753

2025-3-13 17:12:08

在打印日志时,每条指令后面出现 [0m 后缀,通常是因为你在代码中使用了 ANSI 转义序列来控制文本的颜色或样式,但没有正确地处理这些序列。


1. 什么是 [0m


[0m 是 ANSI 转义序列的一部分,表示“重置所有属性”。它通常用于在终端中重置文本的颜色、背景色、加粗、下划线等样式。例如,如果你在终端中打印了一段带颜色的文本,[0m 会告诉终端恢复到默认的文本样式。


2. 为什么会出现 [0m


如果你在代码中使用了类似以下的 ANSI 转义序列来设置文本颜色或样式:


printf("33[31mThis is red text33[0m");

其中 33[31m 表示将文本颜色设置为红色,33[0m 表示重置文本样式。如果你在日志中打印这些序列,但没有正确处理它们,终端会显示 [0m 作为这些序列的一部分。


3. 如何去除 [0m


如果你不希望 [0m 出现在日志中,可以采取以下几种方法:


方法 1:去除 ANSI 转义序列


在打印日志之前,去除所有的 ANSI 转义序列。你可以使用正则表达式或其他字符串处理方法来移除这些序列。


例如,在 Python 中可以使用以下代码:


import re

def remove_ansi_escape_sequences(text):
    ansi_escape = re.compile(r'x1B(?:[@-Z\-_]|[[0-?]*[ -/]*[@-~])')
    return ansi_escape.sub('', text)

log_message = "33[31mThis is red text33[0m"
clean_log_message = remove_ansi_escape_sequences(log_message)
print(clean_log_message)  # 输出: This is red text

方法 2:禁用颜色输出


如果你不需要在日志中显示颜色,可以直接禁用颜色输出。在代码中避免使用 ANSI 转义序列。


例如,在 C 语言中:


// 不使用 ANSI 转义序列
printf("This is plain textn");

方法 3:使用日志库


如果你在使用日志库(如 log4jlogbackspdlog 等),通常这些库会提供配置选项来控制是否输出颜色。你可以通过配置禁用颜色输出。


4. 检查你的代码


检查你的代码中是否有类似 33[31mx1B[31m 的 ANSI 转义序列,并确保它们在日志中正确使用或移除。


5. 终端设置


如果你在终端中查看日志,确保终端的设置支持 ANSI 转义序列。如果终端不支持这些序列,它们可能会被显示为 [0m


总结


[0m 是 ANSI 转义序列的一部分,用于重置文本样式。如果你不希望它出现在日志中,可以通过去除 ANSI 转义序列、禁用颜色输出或使用日志库的配置来解决。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分