我需要连接到网络节点,运行几个命令并将其输出提取到日志文件中。目前我正在使用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和套接字编程的新手,任何帮助都会很棒。