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

Python 3.6通过SSH多次打印内容到文件问题求助

解决Paramiko多条SSH命令写入文件的问题

嘿,作为Python新手碰到这种情况太正常了,我帮你捋捋问题出在哪以及怎么解决~

首先,你遇到的核心问题大概率是两个点:文件打开模式不对,或者每次执行命令后没有正确处理输出流。咱们一步步来改:

可能的问题点&解决办法

  • 文件覆盖问题:如果你的代码里每次写入都用open('file.txt', 'w'),那每次执行命令都会清空文件重新写入,看起来就像后面的命令没生效。改成'a'(追加模式)就能把所有命令的输出都加到文件里。
  • Paramiko命令执行的正确姿势:每次执行新的命令,都要重新调用exec_command(),并且要确保把stdout的内容读完,不然可能会导致会话阻塞,后续命令无法执行。

修改后的完整代码

import paramiko

host = '192.168.100.1'
user = 'MyUser'
secret = 'MyPass'
port = 22

# 建立SSH会话
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(host, port, user, secret)

# 定义要执行的多条命令
commands = [
    'show version',
    'show running-config',
    'show interfaces'
]

# 打开文件(用追加模式'a',如果文件不存在会自动创建)
with open('ssh_output.txt', 'a', encoding='utf-8') as f:
    for cmd in commands:
        print(f"正在执行命令: {cmd}")
        # 每次执行新命令都调用exec_command
        stdin, stdout, stderr = ssh.exec_command(cmd)
        # 读取命令输出(要确保读完,避免阻塞)
        output = stdout.read().decode('utf-8')
        error = stderr.read().decode('utf-8')
        
        # 写入输出到文件
        f.write(f"=== 命令: {cmd} 的输出 ===\n")
        f.write(output)
        if error:
            f.write(f"=== 命令: {cmd} 的错误信息 ===\n")
            f.write(error)
        f.write("\n\n")  # 分隔不同命令的输出

# 关闭SSH会话
ssh.close()
print("所有命令执行完成,输出已写入文件")

关键改动说明

  1. 文件模式改为追加:用with open('ssh_output.txt', 'a', encoding='utf-8'),这样每条命令的输出都会追加到文件末尾,不会覆盖之前的内容。
  2. 循环执行命令:把要执行的命令放到列表里,循环处理每条命令,每次都重新调用exec_command()获取新的输出流。
  3. 完整读取输出:用stdout.read()和stderr.read()把所有输出都读完,避免会话因为未读取的输出而阻塞,导致后续命令无法执行。
  4. 添加分隔符:在文件里加入命令标识和空行,让输出更清晰,方便查看。

这样修改后,你应该就能看到所有show命令的输出都正常写入文件啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:26:50