Parallel-ssh单Shell中循环执行命令无响应问题求助
问题解决:Parallel-SSH单Shell循环执行命令无后续输出
问题原因
- 原代码直接遍历初始的
shell会话列表,第一次读取stdout后,生成器已耗尽,后续循环无法获取新输出。 - 未正确接收
run_shell_commands的返回结果,该返回值才是每次命令执行的结果对象,包含对应命令的输出流。 - 未等待命令执行完成就读取输出,可能导致输出不完整或无内容。
修正后的代码
from pssh.clients import ParallelSSHClient pclient = ParallelSSHClient(['ipaddress'], user="username", password='password') shell = pclient.open_shell() # 执行前置初始化命令 init_cmds = ["echo 'Hello, world!' > example.txt"] pclient.run_shell_commands(shell, init_cmds) # 等待初始化命令执行完成 for sess in shell: sess.wait_finished() # 循环执行cat命令 for _ in range(20): # 执行命令并获取本次的结果对象 cmd_results = pclient.run_shell_commands(shell, ["cat example.txt"]) for result in cmd_results: # 等待命令执行完毕 result.wait_finished() # 读取并打印输出 for line in result.stdout: print(line.strip())
关键修改点
- 每次执行命令后,通过
run_shell_commands的返回值cmd_results获取本次命令的输出,而非复用初始shell对象。 - 添加
wait_finished()确保命令完全执行,避免因输出缓冲区未刷新导致的无内容问题。 - 读取输出时处理每行内容(如
strip()),避免多余换行符。
内容的提问来源于stack exchange,提问作者Amit Shachar
相关产品推荐
相关产品推荐

