【问题标题】:telnetlib read_until buffer sizetelnetlib read_until 缓冲区大小
【发布时间】:2012-04-11 09:57:21
【问题描述】:

背景: 我正在拉取防火墙的连接表以建立一个顶级谈话者/听众列表。

在某些情况下,连接表有 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

我是否遇到了某种缓冲?获取这些数据的更好方法是什么?

谢谢。

【问题讨论】:

    标签: python buffer telnetlib


    【解决方案1】:

    我上次使用 telnetlib 是很久以前的事了,但是……据我所知,使用 read_until 最适合具有更多交互性和更少发生大量数据转储的会话。这个想法是您正在等待特定的模式响应然后再次通信。

    您是否尝试过其他读取选项之一,例如 read_some 并在本地建立响应?就像你说的,这绝对是一个缓冲问题。

    你也可以试试read_until,给它一个超时值,看看你能不能得到至少一部分数据,然后再读一遍。

    另外,我注意到您使用的是 python2.3 。如果您未绑定到该版本,我在 telnetlib 的源代码中注意到最近的更改专门改进了超时处理。

    【讨论】:

    • 谢谢 - 我会和 read_some 一起玩,看看它是否有帮助。 Python 2.3.4 是我们服务器上的标准,很遗憾我无法升级。
    猜你喜欢
    • 1970-01-01
    • 2016-07-31
    • 2020-09-05
    • 2014-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-26
    相关资源
    最近更新 更多