用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)
原文地址:https://www.cnblogs.com/qiurp/p/14258741.html