我有一台 90 年代的频谱分析仪,上面有一个远程登录客户端。我可以使用 Linux telnet CLI 远程登录,效果很好...按预期控制机器。
我想自动执行此操作,以设置好后无需理会的方式进行 100 次不同的测量,因此 Python 是很自然的选择。
我正在查看 telnetlib 模块,并且得到了一些相互矛盾的结果...请注意,我仍处于原型(prototype)设计阶段,所以我正在使用 iPython 来完成这项工作。
基本上,我可以使用 telnetlib.interact()
连接并进入交互式客户端,它的工作原理与 Linux telnet CLI 差不多。但是,当我将准确的调试输出复制到 telnetlib.write()
方法时,仪器没有响应。实际上,它在诊断输出中显示了类似 undefined header
的内容,因此消息未正确传输给它。
这是一个 iPython session 输出:
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) 的方式
发送内容。
有什么地方出错了吗?
最佳答案
这是 this 的副本
需要在消息的换行二进制部分添加一个\r
,所以
tn.write(b'freq:star 110khz\r
不会工作,但是 tn.write(b'freq:star 110khz\r\n
会。
关于python - telnetlib.write() 不复制 telnet.interact(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37704228/