我有一台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>
我出错的任何想法?
答案 0 :(得分:0)
需要将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);
会。