【发布时间】:2014-06-09 17:05:26
【问题描述】:
我很难理解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会怎样?
根据要求,我添加了以下代码的 sn-p:
while reads<maxReads:
resp = self.__chan.recv(maxBytes)
print resp
self.__buffer += resp
if resp.endswith('$ ') or resp.endswith('# '):
break
reads += 1
【问题讨论】:
-
它应该最多接收 nbytes。任何更大的都将占用最大字节块。任何更少,它将返回所有内容,因为它小于最大大小。下次您调用 channel.recv 时,它将从最后一口中断的地方继续。它在命令中的哪个位置停止并不重要,它只会占用指定的最大字节数。向 stderr 发出的任何提示都需要使用 recv_stderr。不确定这是否能回答您的问题。
-
嗯其中之一 :) ... 发送命令,然后调用 recv next 让我得到命令本身而不是真正的响应
-
我们可以看到您发送和接收的代码吗?您可能没有注意到它的编写方式很简单。