You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux服务器Python SSH记录文本含冗余字符问题求助

解决SSH会话记录中的ANSI控制序列冗余问题

你看到的[4;48H这类字符是ANSI终端控制序列,用于控制终端光标移动、颜色输出、屏幕清刷等操作。cat命令会解析并执行这些序列,所以显示效果正常,但文本编辑器会将其当作普通文本直接展示,导致出现冗余内容。

下面是两种可行的解决方法:

方法1:写入文件前过滤ANSI序列

修改你的writeToFile函数,在写入前先清除数据中的ANSI控制序列。可以用正则表达式实现过滤:

import re
import logging

# 匹配常见ANSI转义序列的正则
ANSI_ESCAPE_REGEX = re.compile(r'\x1B(?:[@-Z\\-_]|\[.*?[a-zA-Z])')

async def writeToFile(filename, data):
    try:
        # 过滤ANSI控制序列
        cleaned_data = ANSI_ESCAPE_REGEX.sub('', data)
        path = f'{RECORDINGS_PATH}/{filename}'
        # 用with语句自动管理文件句柄,避免遗漏关闭
        with open(path, "a") as f:
            f.write(cleaned_data)
    except Exception as e:
        logging.exception(f'error writing to recordings file')

这个正则能匹配绝大多数常见的ANSI转义序列,过滤后文件仅保留纯文本内容,文本编辑器打开即可正常显示。

方法2:后处理已生成的记录文件

如果不想修改代码,也可以用Linux工具清理已有的记录文件:

  • 使用sed命令(无需额外安装):
sed -i 's/\x1B\[[0-9;]*[a-zA-Z]//g' /path/to/your/record/file
  • 使用ansifilter工具(需先安装,如apt install ansifilter):
ansifilter -i /path/to/original/file -o /path/to/cleaned/file

额外优化提示

  • 替换手动f.close()为with语句,能更安全地管理文件资源,避免因异常导致文件未正常关闭。
  • 如果需要保留部分终端格式(如颜色),可以考虑将ANSI序列转换为Markdown格式,但这需要更复杂的逻辑,纯文本记录场景一般不需要。

内容的提问来源于stack exchange,提问作者Zag Gol

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 19:17:11