背景: 我正在拉动防火墙的连接表,以便建立一个顶级的谈话者/听众列表。
在某些情况下,连接表是200,000多个条目。我使用telnetlib远程访问防火墙并获取连接表。我使用read_until来捕获数据。但是,当表大于40,000个条目时,它会挂起。当我杀了它时,我看到以下内容:
Traceback (most recent call last):
File "test2.py", line 152, in ?
main()
File "test2.py", line 120, in main
tmp_text = telnet.read_until(pager_text)
File "/usr/lib/python2.3/telnetlib.py", line 317, in read_until
self.process_rawq()
File "/usr/lib/python2.3/telnetlib.py", line 488, in process_rawq
self.cookedq = self.cookedq + buf[0]
KeyboardInterrupt
我是否打了某种缓冲?什么是获得这些数据的更好方法?
感谢。
答案 0 :(得分:2)
我最后一次使用telnetlib已经很久了,但是......据我所知,使用read_until
最适合具有更多交互性且更少发生大量数据转储的会话。这个想法是你在等待特定的模式响应,然后再次进行通信。
您是否尝试过其中一个其他阅读选项,例如read_some
并在当地建立您的回复?像你说的那样肯定是缓冲问题。
你也可以尝试read_until
并给它一个超时值,看看你是否能获得至少部分数据,然后再读一遍。
另外,我注意到你正在使用python2.3。如果您不受该版本的约束,我在telnetlib的源代码中注意到,最近的更改特别改进了超时处理。