用paramiko包对远程服务器操作时报错paramiko.buffered_pipe.pipeTimeout
最近在做服务端的一些自动化测试,用到了python下的paramiko这个包连接远程服务器并执行一些操作。
当我向服务器发送了一些命令,准备接收返回结果的时候,也就是用到了recv这个方法的时候会报错paramiko.buffered_pipe.pipeTimeout
调试后发现是因为服务端需要一定时间才能响应,不能及时返回数据,所以需要设置超时时间。
看了下源码,paramiko/channel.py下的recv方法里面并没有timeout这个参数,但官网文档里面是有timeout这个参数的
官方文档:http://docs.paramiko.org/en/stable/api/channel.html
且recv方法里面调用的read方法里也是有timeout这个参数设置的,所以在recv方法里加入这个参数即可。
官方文档:http://docs.paramiko.org/en/stable/api/buffered_pipe.html
修改后的代码为:
def recv(self,nbytes,timeout=None):
try:
out = self.in_buffer.read(nbytes,timeout)
except PipeTimeout:
raise socket.timeout()
修改完成后,调用recv方法时根据服务器响应的时间加入timeout这个参数就可以了。
self.chan.recv(1024,timeout=20)