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

时间:2016-06-08 13:41:59

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

我有一台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)发送内容的方式。 / p>

我出错的任何想法?

1 个答案:

答案 0 :(得分:0)

这是this answer

的副本

需要将tn.write(b'freq:star 110khz\r添加到邮件的换行二进制部分,所以 tn.write(b'freq:star 110khz\r\n无效,但create FUNCTION Test(schemaname in varchar2, tablename in varchar2) return number IS cnpParmId NUMBER; good VARCHAR(1) := 'F'; exist VARCHAR(1) := 'F'; value1 varchar2(500); begin good := 'F'; exist := 'F'; loop SELECT cols.column_name into value1 FROM all_constraints cons, all_cons_columns cols WHERE cols.TABLE_NAME= 'tablename' And cols.OWNER='schemaname' And cons.constraint_type = 'P' AND cons.constraint_name = cols.constraint_name AND cons.owner = cols.owner ORDER BY cols.table_name, cols.position; select schemaname.value1_seq.nextval into cnpParmId from dual; begin select 'T' into good from dual where cnpParmId not in (select value1 from schemaname.tablename); exception when NO_DATA_FOUND then good := 'F'; end; exit when good = 'T'; end loop; return cnpParmId; end; / Test(XYZ,ABC); 会。