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("所有命令执行完成,输出已写入文件")
关键改动说明
- 文件模式改为追加:用
with open('ssh_output.txt', 'a', encoding='utf-8'),这样每条命令的输出都会追加到文件末尾,不会覆盖之前的内容。 - 循环执行命令:把要执行的命令放到列表里,循环处理每条命令,每次都重新调用
exec_command()获取新的输出流。 - 完整读取输出:用
stdout.read()和stderr.read()把所有输出都读完,避免会话因为未读取的输出而阻塞,导致后续命令无法执行。 - 添加分隔符:在文件里加入命令标识和空行,让输出更清晰,方便查看。
这样修改后,你应该就能看到所有show命令的输出都正常写入文件啦~
内容的提问来源于stack exchange,提问作者Tamir
相关产品推荐
相关产品推荐

