Asynchronous Python telnet下载仪器数据

Asynchronous Python telnet下载仪器数据,asynchronous,download,telnet,Asynchronous,Download,Telnet,我想写一些python代码来下载压力传感器的数据,我们有一个。该传感器连接到我们的路由器,可以通过telnet会话进行联系,在telnet会话中,简单的命令可以根据请求吐出数据,也可以吐出连续的数据流。手册第94页列出了可发送至仪器的命令。我对python非常陌生,但确实有一些Fortran编程经验,因此了解一些编程语言的结构 我希望有人能帮我一些想法,我应该实现哪些模块来实现这一点。我对这个话题做了一些研究,发现这些过去的问题有一定的相关性(,) 我已经开始尝试使用telnetlib通过以下命

我想写一些python代码来下载压力传感器的数据,我们有一个。该传感器连接到我们的路由器,可以通过telnet会话进行联系,在telnet会话中,简单的命令可以根据请求吐出数据,也可以吐出连续的数据流。手册第94页列出了可发送至仪器的命令。我对python非常陌生,但确实有一些Fortran编程经验,因此了解一些编程语言的结构

我希望有人能帮我一些想法,我应该实现哪些模块来实现这一点。我对这个话题做了一些研究,发现这些过去的问题有一定的相关性(,)

我已经开始尝试使用telnetlib通过以下命令连接到乐器

导入系统

导入telnetlib

主机='xxx.xxx.xxx.xxx'

tn=telnetlib.Telnet(主机)

开放式

tn.write('r')

阅读非常渴望

这将导致读取一行数据

e、 g

2000-01-06 23:43:04 p=980.0T=-4.3'C\r\n>r

但是,后面的tn.read_very_eager()不会返回任何内容

我在这个read命令上尝试了不同的[variance][4],例如

tn.read_直到('C')

但任何后续读取都不会返回任何内容。我相信可能会发生一些“阻塞”?并不是说我真的知道那是什么

我也试着使用

tn.write('send')

tn.read_直到('C')

但这将只返回一次读取,后续读取将不返回任何内容

过去的stackoverflow问题中有[1][5]建议使用[asynchat][6]或[socket][7]模块执行此类操作。我还没有试过使用它们。人们认为这是一条更好的攻击线吗?仪器无需用户名或密码即可连接

所以我的问题是,如何才能最好地连接到这个工具(哪个包,telnetlib,asynchat,socket)

如何避免telnet连接被阻止?(即只能检索一行数据)

如果这个问题已经得到回答,我将不胜感激

问候

阿曼


ps,很抱歉,它不允许我附加所有链接

我已经使用telnetlib一个多星期了,下面是我可以分享的内容

要避免调用.read_直到阻塞,请将等待的秒数作为第二个参数。像
tn.read\u直到('C',10)
将等待10秒,让'C'显示在缓冲区中。如果它在0.5秒内找到它,它将只阻塞0.5秒。如果在该时间内未找到“C”,它将返回缓冲区中到目前为止存在的任何内容,如果没有,则返回“”

在我的例子中,我连接的设备使用DOS样式的换行符,即“\r\n”,因此当我需要发送带有换行符的行时,我必须使用:
tn.write('request\r')


希望这能有所帮助。

我已经使用telnetlib一周多了,下面是我可以分享的内容

要避免调用.read_直到阻塞,请将等待的秒数作为第二个参数。像
tn.read\u直到('C',10)
将等待10秒,让'C'显示在缓冲区中。如果它在0.5秒内找到它,它将只阻塞0.5秒。如果在该时间内未找到“C”,它将返回缓冲区中到目前为止存在的任何内容,如果没有,则返回“”

在我的例子中,我连接的设备使用DOS样式的换行符,即“\r\n”,因此当我需要发送带有换行符的行时,我必须使用:
tn.write('request\r')

希望对你有所帮助。

谢谢吉姆

谢谢你的提示,我最终还是使用了套接字模块来连接,只是因为它似乎提供了更多的功能(我并不需要它们)

我发现我的问题是,我没有用“发送”命令发送回车(正如您所指出的。发生的是,当您连接到系统时,系统将输出一行测量值。这将是我收到的行。但是,当我发送“向其发送”命令我从未将\r放在末尾,并且该命令未在仪器上执行

对于其他可能会将其与维萨拉PTU300联系起来进行谷歌搜索的人,这里的代码适用于我(我删掉了很多循环,只保留了这个基本代码)。请注意,我已将仪器置于停止模式并关闭了ECHO。我还发现检索到的前几行数据是象形文字,我将它们放入一个名为垃圾的变量中

导入套接字 导入系统

加载配置参数-将来从文件导入

ip='xxx.xxx.xxx.xxx'

端口=23

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

s、 连接((ip,端口))

垃圾=s.recv(1024)

斯莫德停了下来

s、 send('send\r')

垃圾=s.recv(1024)

s、 send('send\r')

数据=s.recv(128)

打印数据

谢谢Jim

谢谢你的提示,我最终还是使用了套接字模块来连接,只是因为它似乎提供了更多的功能(我并不需要它们)

我发现我的问题是,我没有用“发送”命令发送回车(正如您所指出的。发生的是,当您连接到系统时,系统将输出一行测量值。这将是我收到的行。但是,当我发送“向其发送”命令我从未将\r放在末尾,并且该命令未在仪器上执行

对于其他可能搜索与其维萨拉PTU300相关的信息的人,以下是对我有用的代码(我删掉了很多循环,只保留了基本信息)。请注意,我已将仪器置于停止模式并关闭了ECHO。我还发现检索到的前几行数据更高