2017-05-06 66 views
0

我正试图通过IP设备发送嵌入在telnet数据中的RS232命令。它完美地使用万亿期限和Windows命令提示符下的telnet,但它不使用Python工作(telnetlib)有没有一种方法来嵌入` r`甚至是` n`来通过Python发送telnet?

Using Tera Term, it works fine:

Correct Result (Fan status of 3 fans) MCU responds Correctly

然而,当我使用Python的Telnet库:

tn = telnetlib.Telnet(HOST,PORT,timeout = 3) 
tn.write('send '+ DEVICE_MAC + ' rs232:1 get_fan ?\r') 

HOST,PORT和DEVICE_MAC都在我原来的代码中定义。 由于某些原因,\ r不会发送到主机。

get_fan ?\r 

\r需要用于主机MCU正确处理get_fan ?命令,但Python代码以上只发送get_fan ?而不\r

有没有办法嵌入\r甚至\n通过telnet发送? 我正在寻找telnetlib.py中的线索,但可能解决方案更简单。如果可能,我将非常感谢您的意见。谢谢!

+0

如果我明白了,你想发送/传递'get_fan?\ r'到命令'send rs232:1' ...如果是这样,请尝试将它包裹在单引号之间,你也可以考虑在\\ r'中跳过'\ r'。如果您想“只需点击输入”,请尝试使用“\ n”。除了几乎所有的路由器模型外,我遇到的几乎每个telnet服务器都使用“默认”telnet换行符“\ n”。 –

+0

嗨Lohmar。感谢您的评论。我明白你的观点,我完全明白你的观点。问题是,一旦telnetlib.py在要发送的数据中看到一个“\ n”,它会解释此发送telnet数据(或flush。())套接字(我认为)。我发誓,我一直强调这几天,我刚刚找到解决方案。我会发布一个答案。 – bluesclues

回答

0

因此,解决方案是使用“字符串字面量”的概念。我只是碰到了这个链接的线索https://docs.python.org/2.0/ref/strings.html

我应该从一开始就使用了正确的代码是:

tn = telnetlib.Telnet(HOST,PORT,timeout = 3) 
tn.write('send '+ DEVICE_MAC + ' rs232:1 get_fan ?' + r'\r' + '\r\n') 

我用+级联只是为了清楚,但'\r'前添加r防止回车从被解释为远程登录转义序列,因此它在远程登录数据中作为字符串发送。第二个回车和换行\r\n肯定需要解释为转义序列来刷新套接字并发送telnet数据。

相关问题