我有一台90年代的频谱分析仪,上面有一个telnet客户端 . 我可以使用Linux telnet CLI远程登录,这非常有效...按预期控制机器 .
我想自动化这个东西,在一个设置它忘记它的样式设置中做100个不同的测量,所以Python很自然 .
我正在看telnetlib模块,并且有一些相互矛盾的结果......请注意,我仍处于原型设计阶段,因此我正在使用iPython来完成这项工作 .
基本上,我可以使用 telnetlib.interact()
连接并进入交互式客户端,这与Linux telnet CLI的工作方式基本相同 . 但是,当我将确切的调试输出复制到 telnetlib.write()
方法时,仪器不响应 . 实际上,它说的是 undefined header
正确地传递给它 .
这是一个iPython会话输出:
In [2]: import telnetlib
In [3]: HOST = "192.168.0.118"
In [4]: tn = telnetlib.Telnet(HOST, "5024")
In [5]: tn.set
tn.set_debuglevel tn.set_option_negotiation_callback
In [5]: tn.set_debuglevel(2)
In [6]: tn.interact()
Telnet(192.168.0.118,5024): recv b'Welcome to Telnet SCPI Server: agilent\r\nAgilent Te'
Welcome to Telnet SCPI Server: agilent
Agilent TeTelnet(192.168.0.118,5024): recv b'chnologies, N1996A, US45310134, A.02.03\r\n\r\nSCPI>\xff\xfb'
chnologies, N1996A, US45310134, A.02.03
SCPI>Telnet(192.168.0.118,5024): recv b'\x01\xff\xfb\x03'
Telnet(192.168.0.118,5024): IAC WILL 1
Telnet(192.168.0.118,5024): IAC WILL 3
Telnet(192.168.0.118,5024): recv b'\xff\xfc\x01'
Telnet(192.168.0.118,5024): IAC WONT 1
Telnet(192.168.0.118,5024): recv b'\xff\xfc\x03'
Telnet(192.168.0.118,5024): IAC WONT 3
freq:star 110khz
Telnet(192.168.0.118,5024): send b'freq:star 110khz\n'
Telnet(192.168.0.118,5024): recv b'SCPI>`
SCPI>
但是,如果我发送相同的东西
tn.write(b'freq:star 110khz\n')
,
什么都没发生......或者,如果我发送
tn.write(b'freq:star 110khz\n\n')
,
没有任何反应......没有错误信息或仪器上的任何东西 . 这就像什么也没发生过一样 .
我已经看到stackoverflow上的一些问题表明时间是一个问题...我不知道如何修复除了添加 tn.set_debuglevel(2)
作为一种解决方法来增加延迟,但这也可能是我的误解 .
我知道这些乐器期望在逐个字符模式下看到事物而不是说是否支持逐行模式,这就是我假设 tn.write(foo)
发送内容的方式 .
我出错的任何想法?
1 回答
这是this的副本
需要将
\r
添加到消息的换行二进制部分,因此tn.write(b'freq:star 110khz\r
将不起作用,但tn.write(b'freq:star 110khz\r\n
将 .