python - telnetlib.write() 不复制 telnet.interact()

标签 python linux python-3.x automated-tests telnet

我有一台 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/

相关文章:

python - 引发 ClientException(required_message.format(attribute)) praw.exceptions.ClientException : Required configuration setting 'client_id' missing

python - Airflow 通过 Snowflake session_parameters

Python - 合并两个二维列表,覆盖一个的值

python 3 : `else` statement get executed even `if` statement was true

python - 如何读取和搜索多个文本文件,以便存储与我的搜索匹配的文件列表?

c++ - libmarkdown2(优惠)线程安全使用?

linux - 单独 Gzip 多个文件并保留原始文件

linux - 分层 ldd(1)

python - 如何将列添加到多索引数据帧?

python - 如何根据 Pandas 另一列中的条件生成具有值的新列