2017-05-06 67 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數據。

相關問題