我有一个90年代的频谱分析仪,上面有个telnet客户端。我可以用linuxtelnetcli进行telnet,这很好…可以按预期控制机器。在
我想把这件事自动化,在一个set-it中完成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)
作为增加延迟的解决方法之外,我不知道如何解决这个问题,但这可能也是我的误解。在
我确实知道,这个工具期望以字符逐个模式查看内容,并且没有说明is是否支持逐行模式,这就是我假设tn.write(foo)
发送内容的方式。在
你知道我哪里出错了吗?在
这是this的副本
需要向消息的换行二进制部分添加}可以。在
\r
,因此tn.write(b'freq:star 110khz\r
不能工作,但是{相关问题 更多 >
编程相关推荐