我正在使用 paramiko 在 python 2.7 中编写一个小自动化软件。有可能在执行期间远程机器(ssh 服务器)死机,我的 paramiko 客户端无法识别它并挂在 recv_exit_status() 方法上。如果我为通道或传输设置超时,它什么也不做。transport.set_keepalive() 也没有帮助。
channel = transport.open_session()
channel.exec_command(cmd)
exit_code = channel.recv_exit_status()
我认为另一种方法也可能很好:
transport.set_keepalive(1)
channel = transport.open_session()
channel.exec_command(cmd)
while not channel.exit_status_ready():
time.sleep(1)
print "waiting", str(transport.is_active())
exit_code = channel.recv_exit_status()
但是 is_active() 总是返回 True,它永远不会变为 False,即使在半分钟后...不允许这样做(主要是从专业角度来看)。另外,我知道主动轮询通常是不好的编程技术,但我还是尝试过......谢谢大家的帮助