我很难理解recv()
功能的工作原理。
http://docs.paramiko.org/en/1.13/api/channel.html#paramiko.channel.Channel.recv
我知道每次调用函数时都会收到一个数据块,但有人可以详细说明这些数据的结构或大小吗?假设我发送命令date
,我注意到:
但是,它如何处理终端上随机出现的调试消息?
只要实际响应小于最大字节数(nbytes
),前一个模式是否成立?
如果超过nbytes
会怎样?
根据要求,我已添加以下代码片段:
while reads<maxReads:
resp = self.__chan.recv(maxBytes)
print resp
self.__buffer += resp
if resp.endswith('$ ') or resp.endswith('# '):
break
reads += 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