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

Python使用pxssh SSH远程获取输出带\r\n未正常换行问题

问题根因

pxssh读取SSH会话返回的内容时,会保留终端传输协议使用的\r\n(CRLF)格式回车换行符,未做处理直接打印时,这类转义字符不会被解析为实际换行,会作为普通文本输出,导致内容挤在同一行、转义符直接可见。

修复方法

方法1:手动替换转义字符(最稳定)

拿到返回内容后统一将\r\n替换为标准换行符\n,同时可以剔除结果开头自带的命令回显(你发送的cat命令本身会被终端回显在返回结果最前端,不属于文件内容)。
完整修复代码:

from pexpect import pxssh
try:
    # 显式指定编码,避免字节/字符串类型转换异常
    s = pxssh.pxssh(encoding='utf-8')
    hostname = "10.89.71.39"
    username = "manoadmin"
    password = "********"
    s.login(hostname, username, password)
    s.sendline('cat manobackup_scripts/networkmon.py')
    s.prompt()
    # 处理返回内容:替换换行符,剔除开头的命令回显行
    raw_content = s.before.replace('\r\n', '\n').strip()
    # 分割掉第一行的命令回显
    if raw_content.startswith('cat manobackup_scripts/networkmon.py'):
        raw_content = raw_content.split('\n', 1)[1]
    print(raw_content)
    s.logout()
except pxssh.ExceptionPxssh as e:
    print("pxssh登录失败")

方法2:初始化pxssh时自动处理换行

初始化pxssh对象时指定crnl参数,让库自动完成回车换行符转换,不需要手动替换:

# 初始化时指定换行符为\n,关闭命令回显
s = pxssh.pxssh(encoding='utf-8', options={
    'echo': False,
    'crnl': '\n'
})

后续直接打印s.before即可得到正常换行的内容。

处理后输出效果

import os
import socket

import time

start_time = time.time()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 18:24:31