我正在使用Paramiko来执行一些命令并收集结果以进行进一步的分析。偶尔第一个命令的结果没有及时返回,就会出现在第二个命令的输出中。
我尝试使用recv_ready来解决这个问题,但它没有起作用,所以我认为我做错了什么。以下是相关代码:
pause = 1
def issue_command(chan, pause, cmd):
# send commands and return results
chan.send(cmd + '\n')
while not chan.recv_ready():
time.sleep(pause)
data = chan.recv(99999)
ssh = paramiko.SSHClient()
ssh.load_system_host_keys()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
chan = ssh.connect(host, port=22, username=username, password=password, timeout=3,)
resp1 = issue_command(chan, pause, cmd1)
resp2 = issue_command(chan, pause, cmd2)
这些命令的输出内容相对较少(几句话而已)。增加暂停时间可能会解决问题,但并不是理想的解决方案。
recv_ready()
可能在通道流关闭之前返回False
。更多详情请参见:https://dev59.com/uIzda4cB1Zd3GeqPkUQT#39019370 - Ivan