我想编写一些 python 代码来从我们拥有的压力传感器Vaisala PTU300下载数据。该传感器连接到我们的路由器,并且可以通过 telnet 会话进行联系,在该会话中,简单的命令会根据请求输出数据,或者它可以输出连续的数据流。手册的第 94 页列出了您可以发送到仪器的命令。我对 python 很陌生,但确实有一些 Fortran 编程经验,所以了解一些编程语言的结构。
我希望有人可以帮助我了解我应该实施哪些模块来做到这一点。我对该主题进行了一些研究,发现这些过去的问题具有一定的相关性(如何使用 python 的 telnetlib 在固定的时间段内从设备获取数据?,如何保存 telnet 命令的输出使用python无限时间[关闭])。
我已经开始尝试使用 telnetlib 通过以下命令连接到仪器
导入系统
导入 telnetlib
主机 = 'xxx.xxx.xxx.xxx'
tn=telnetlib.Telnet(主机)
tn.open
tn.write('r')
tn.read_very_eager()
这导致读取一行数据
例如
2000-01-06 23:43:04 P= 980.0 T= -4.3 'C \r\n>r
但是随后的 tn.read_very_eager() 不返回任何内容。
我在这个读取命令上尝试了不同的 [variations][4],例如
tn.read_until('C')
但任何后续读取都不会返回任何内容。我相信可能会发生一些“阻塞”?并不是说我真的知道那是什么。
我也尝试过使用
tn.write('发送')
tn.read_until('C')
但这只会返回一个读数,随后的读数不会返回任何内容。
[One][5] 过去的 stackoverflow 问题建议使用 [asynchat][6] 或 [socket][7] 模块来执行此类操作。我还没有尝试使用它们。人们是否认为这是更好的进攻路线?仪器无需用户名或密码即可连接。
所以我的问题是,我怎样才能最好地连接到这个仪器(哪个包,telnetlib,asynchat,socket)?
如何避免 telnet 连接被阻止?(即只能检索一行数据)?
任何建议将不胜感激,如果这个问题已经得到解答,我表示歉意。
问候
阿曼
ps,对不起,它不允许我附上我所有的链接