paramiko Channel.recv()如何正常工作?

时间:2014-06-09 17:05:27

标签: python paramiko

我很难理解recv()功能的工作原理。

http://docs.paramiko.org/en/1.13/api/channel.html#paramiko.channel.Channel.recv

我知道每次调用函数时都会收到一个数据块,但有人可以详细说明这些数据的结构或大小吗?假设我发送命令date,我注意到:

  • 第一次阅读获得:"日期"
  • 第二次阅读获得:实际回复(2014年6月9日12:04:17 CDT)
  • 第三次读取:提示

但是,它如何处理终端上随机出现的调试消息?

只要实际响应小于最大字节数(nbytes),前一个模式是否成立?

如果超过nbytes会怎样?

根据要求,我已添加以下代码片段:

while reads<maxReads:
   resp = self.__chan.recv(maxBytes)
   print resp
   self.__buffer += resp
   if resp.endswith('$ ') or resp.endswith('# '):
      break
   reads += 1

1 个答案:

答案 0 :(得分:0)

Channel recv()对应于socket.recv(),它没有任何特定的结构或大小,只读取从远程服务器发送的任何数据,不超过maxBytes。

你通常在循环中使用recv(),直到你得到一个你正在等待的数据:

def _wait_for_data(self, options, verbose=False):
    chan = self.chan
    data = ""
    while True:
        x = chan.recv(1024)
        if len(x) == 0:
            self.log("*** Connection terminated\r")
            sys.exit(3)
        data += x
        if verbose:
            sys.stdout.write(x)
            sys.stdout.flush()
        for i in range(len(options)):
            if re.search(options[i], data):
                return i
    return -1