如何在Paramiko中一次性打印多条exec_command命令的执行结果?
如何一次性打印多条命令的执行结果?
你现在遇到的问题是每次调用exec_command时,都用同一个stdout变量接收结果,导致前两次的输出被第三次的覆盖了。要解决这个问题,核心思路就是不要重复复用同一个变量存储输出,而是把每条命令的结果单独保存,最后再一起输出。
这里有两种实用的解决方案:
方案1:单独存储每个命令的输出
直接给每条命令的输出分配独立的变量,最后拼接起来打印:
# 分别执行三条命令,用不同变量保存stdout对象 _, stdout_version, _ = client1.exec_command('show version') _, stdout_interface, _ = client1.exec_command('show interfaces ge-0/0/10') _, stdout_routing_engine, _ = client1.exec_command('show chassis routing-engine') # 一次性打印所有结果,用换行分隔让内容更清晰 print(stdout_version.read() + '\n\n' + stdout_interface.read() + '\n\n' + stdout_routing_engine.read())
这里用_忽略了不需要的stdin和stderr(如果需要处理错误信息,可以把_换成对应的变量),用不同的变量存储每条命令的输出对象,最后把三个read()的结果拼接,中间加两个换行让不同命令的输出区分开。
方案2:用列表批量收集输出(更灵活)
如果后续可能要添加更多命令,用列表循环收集结果会更简洁易维护:
# 把要执行的命令放到列表里 commands = [ 'show version', 'show interfaces ge-0/0/10', 'show chassis routing-engine' ] output_list = [] for cmd in commands: _, stdout, _ = client1.exec_command(cmd) # 读取输出并添加到列表 output_list.append(stdout.read()) # 用换行符把列表里的所有结果拼接起来打印 print('\n\n'.join(output_list))
这种方式的好处是,以后要加新命令,只需要在commands列表里追加就行,不用修改后续的打印逻辑。
两种方法都能实现你要的“一条print语句打印所有三条命令输出”的需求,根据你的实际场景选就行~
内容的提问来源于stack exchange,提问作者sivabala senna
相关产品推荐
相关产品推荐

