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

Python如何移除paramiko SSH输出中残留的\x1b[1B转义字符

问题原因

你看到的\x1b[1B是终端ANSI光标控制转义序列(作用是光标下移1行),不属于标准换行符,所以splitlines()方法不会自动识别处理这类字符。这类字符一般是因为你通过paramiko连接时分配了伪终端(PTY),终端交互过程中输出的光标控制、颜色渲染类控制码会和业务输出一起返回。

解决方案

方案1:通用正则清理(适配所有带ANSI转义符的输出场景)

用正则匹配所有ANSI转义序列批量移除,不需要针对单个转义符写死替换规则,后续碰到颜色、其他光标控制符也能一次性清理:

import re

# 原始返回内容
raw_list = ['Total active sessions : 0\r\x1b[1BActive TCP sessions   : 0\r\x1b[1BActive UDP sessions   : 0\r\x1b[1BActive ICMP sessions  : 0\r\x1b[1B']
# 预编译ANSI转义符匹配规则
ansi_pattern = re.compile(r'\x1b\[[0-9;]*[a-zA-Z]')

clean_lines = []
for content in raw_list:
    # 先清除所有ANSI转义符
    content_clean = ansi_pattern.sub('', content)
    # 拆分后过滤空行、首尾空白
    for line in content_clean.splitlines():
        stripped_line = line.strip()
        if stripped_line:
            clean_lines.append(stripped_line)

print(clean_lines)

执行后输出结果:

['Total active sessions : 0', 'Active TCP sessions   : 0', 'Active UDP sessions   : 0', 'Active ICMP sessions  : 0']

方案2:从paramiko调用源头避免转义符输出

如果你的命令不需要交互式终端执行,调用exec_command时不要开启get_pty=True参数(该参数默认值为False,手动开启才会分配伪终端),关闭后绝大多数防火墙、服务器返回的命令输出不会携带这类终端控制转义符,不需要额外做文本清理。
示例正确调用方式:

# 不要加get_pty=True
stdin, stdout, stderr = ssh.exec_command("show session")
output = stdout.read().decode()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 14:01:25