如何让Python logger按屏幕显示规则解析回车符,保留最终进度状态
解决方案
核心逻辑非常简单:按换行符\n拆分出所有逻辑行块,每个块内按回车符\r拆分后取最后一段(就是被回车覆盖后保留的最终内容),再把处理后的块拼接回去即可。
极简实现代码
def process_carriage_return(raw_str: str) -> str: # 拆分每个逻辑行,处理行内回车覆盖的冗余内容 processed_lines = [line_block.split('\r')[-1] for line_block in raw_str.split('\n')] return '\n'.join(processed_lines)
使用示例
用你给出的测试数据验证:
receivedData = "command x exec: \nin progress 0/8192\rin progress 8096/8192\rin progress 8128/8192\rin progress 8160/8192\rin progress 8192/8192\nDONE" result = process_carriage_return(receivedData) # 写入日志前直接处理即可 import logging logging.basicConfig(filename='serial.log', level=logging.INFO) logging.info(result)
处理后的输出完全符合你的预期:
command x exec: in progress 8192/8192 DONE
说明
这个实现天然支持所有常见边界场景:连续多个\r、行首行尾有\r、空内容块等,不需要额外加判断逻辑,性能也足够处理串口接收的普通数据量。
内容的提问来源于stack exchange,提问作者JBiron
相关产品推荐
相关产品推荐

