我正试图用python控制一个信号发生器。我只需要改变幅度和频率。‘我的代码如下:
import telnetlib
HOST = "169.145.1.1"
timeout = 5
PORT = 5023
tn = telnetlib.Telnet(HOST, PORT , timeout)
tn.read_until("SCPI>", timeout)
tn.write('FREQ 3ghz\r\n')
tn.read_until("SCPI>", timeout)
tn.write('AMPL 10dbm\r\n')
tn.read_until("SCPI>", timeout)
tn.close()`当我在端口5023上直接打开telnet会话时,我可以更改Freq和Amp,但不能使用上面的脚本。调试会话显示telnet连接成功,它确实发送了命令,但在sig上没有发生任何更改。谢谢
发布于 2016-11-07 16:46:40
我想明白了。我需要在每个命令之后添加\r\n,而不仅仅是\n。一旦实现了这个更改,Sig Gen值就会改变。我更新了剧本。谢谢
发布于 2016-11-06 00:08:22
测试
我已经在侦听的nc上运行了您的代码,Python2.7抱怨对telnetlib.Telnet(HOST, PORT , timeout, Debug)的调用是错误的--参数Debug应该被省略。
实际上,在文档中不存在Debug参数:
Telnet.open(主机[,端口,超时]) 连接到主机。可选的第二个参数是端口号,它默认为标准Telnet端口(23)。任选 timeout参数指定以秒为单位的超时,用于阻塞操作,例如连接尝试(如果未指定,将使用全局默认超时设置)。 不要试图重新打开已连接的实例。在版本2.6中更改:添加了超时。
但是,一旦修复了这个问题,那么通过原始模式的telnet和您的代码发送的命令是完全相同的。这可能是一些奇怪的时机问题,但除此之外,它应该是可行的。
为了安全起见,如果我是你的话,我还是会开一个tcpdump的。
旧答案
您没有终止这些命令,所以它们不会被执行。.write() 不会自动终止命令。
tn.write('FREQ 1.92ghz' + "\n")另外,在结束前等待答案,以防万一。
tn.read_until("some answer", timeout)
tn.close()https://stackoverflow.com/questions/40444615
复制相似问题