如何使用python';s telnetlib在固定时间段内从设备获取数据?

如何使用python';s telnetlib在固定时间段内从设备获取数据?,python,telnet,Python,Telnet,我正在通过telnet连接到硬件设备。这个设备在I/O方面非常简单,所以我向它提交一个命令,然后设备一次输出一行数据,每秒一次。每行只包含一个数字 所以我的问题是:如果我使用python的telnetlib连接到这个设备,我如何获取固定时间段(或固定数量的数据行)的数据 我尝试过使用各种各样的read_u命令,但它们似乎都会无限期地阻塞,除了read_uuntil,我不能使用它,因为无法使用输出来确定何时停止 (顺便说一句,我正在Cygwin下运行python 2.5) 编辑:可能真正的问题是,

我正在通过telnet连接到硬件设备。这个设备在I/O方面非常简单,所以我向它提交一个命令,然后设备一次输出一行数据,每秒一次。每行只包含一个数字

所以我的问题是:如果我使用python的telnetlib连接到这个设备,我如何获取固定时间段(或固定数量的数据行)的数据

我尝试过使用各种各样的read_u命令,但它们似乎都会无限期地阻塞,除了read_uuntil,我不能使用它,因为无法使用输出来确定何时停止

(顺便说一句,我正在Cygwin下运行python 2.5)


编辑:可能真正的问题是,我到底应该使用telnetlib还是只使用socket模块?

在循环中读取行,直到您读取了所需的行数或达到了时间限制。然而,听起来您并不真正需要telnet库。为什么不使用简单的TCP进行连接

根据我的经验,大多数这样的设备都会使用一些提示,在这种情况下:

Telnet.read_直到(预期[,超时])

读取,直到遇到预期的给定字符串,或者直到超过超时秒。 如果没有找到匹配项,则返回可用的内容,可能是空字符串。如果连接已关闭且没有现成数据可用,则升高EOFError

如果设备未显示可用(重复)提示,请尝试,或
Telnet.read\u very\u lazy()

Telnet.read\u very\u eager()

在I/O(渴望)中读取可以不阻塞的所有内容

如果连接关闭且无可用数据,则升高EOFError。如果没有可用的现成数据,则返回“”。除非在IAC序列中,否则不要阻塞


根据您的描述,我不清楚您是否正在使用telnetlib,因为您连接到的设备需要telnet提供的终端设置,或者因为这样做似乎是正确的

如果设备像您描述的那样简单——即不协商连接上的终端选项——您是否考虑过该模块?它适用于您所描述的“发送命令,读取行”类型的IO模式


或者,对于较低级别的内容,您可以使用模块打开与设备的连接,然后坐在一个定时循环中,读取传入的数据。如果行是换行终止的,那么识别每个单独的数字应该很简单。如果您关心阻塞,请将此循环固定在它自己的线程中。

听起来阻塞并不是您真正的问题,因为您知道您只会阻塞一秒钟。为什么不这样做呢:

lines_to_read = 10
for i in range(lines_to_read):
    line = tel.read_until("\n")

完全正确我的错误是认为我首先需要使用telnet!