Python循环中字典出现重复值:多设备远程命令执行异常
问题解决:pexpect多设备执行命令输出重复问题
你的代码中所有设备的命令输出都显示为最后一台设备的结果,核心原因是**command_out字典在设备循环外部定义,所有设备条目都引用了同一个字典对象**。每次循环只是修改这个字典的内容,最终所有设备对应的都是最后一次循环修改后的字典。另外代码里还有个笔误:child.pexpect('assword')应该改成child.expect('assword')。
修正后的代码
import pexpect import sys devices = ['10.10.10.10', '10.10.10.11'] commands = ['cmd1','cmd2'] final_dict = {} for dev in devices: # 将command_out移至设备循环内部,每个设备创建独立字典 command_out = {} child = pexpect.spawn('ssh user@' + dev) child.expect('assword') child.sendline('mypass') child.expect('#') for cmd in commands: child.sendline(cmd) child.expect('#') command_out[cmd] = child.before child.sendline('exit') final_dict[dev] = command_out print(final_dict)
修正说明
把command_out = {}移动到for dev in devices:循环内部后,每处理一台设备都会生成一个全新的字典来存储该设备的命令输出,这样final_dict中每个设备对应的都是独立的字典,不会被后续设备的输出覆盖,就能得到你期望的输出结果。
内容的提问来源于stack exchange,提问作者Sandeep_Patil
相关产品推荐
相关产品推荐

