如何从网络节点可靠地获取大块数据

时间:2015-01-13 07:37:43

标签: python sockets twisted paramiko

我需要连接到网络节点,运行几个命令并将其输出提取到日志文件中。目前我正在使用Paramiko库来达到此目的。代码实际上在while循环中对通道对象使用recv_ready()方法,因此它应该继续收集命令输出,直到缓冲区为空。

以下是设置频道的代码(来自班级的片段),

self.client = paramiko.SSHClient()
self.client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

self.client.connect(self.nw_host, username=self.nw_user, password=self.nw_pass, timeout=60)

# invoke interactive shell
self.channel = self.client.invoke_shell()

...这里是我尝试获取输出的代码,

while self.channel.recv_ready():
    cmd_out_data += self.channel.recv(self.buffer_size)

buffer_size是我在一次读取中(从输出缓冲区)接收的数据块。

除了命令输出非常大的情况外,此设置运行正常。在如此大的输出情况下,我无法使用recv捕获整个输出,并且部分输出会转移到下一个命令的输出日志中。

我想知道这是否是正确的方法,如果没有,在Paramiko中这样做的正确方法是什么?此外,Python Twisted库可以帮助我吗?我是Python和套接字编程的新手,任何帮助都会很棒。

0 个答案:

没有答案
相关问题