2017-05-06 1 views
0

私は、IPデバイス上のビデオ用のtelnetデータに埋め込まれたRS232コマンドを送信しようとしています。これは、Tera TermのとウィンドウがTelnetプロンプトをコマンドを使用して完璧に動作しますが、それは(telnetlib)はPythonを使って作業していない私は、PythonのTelnetのライブラリを使用` r`や` n`をPythonでtelnetを使って送る方法はありますか?

Using Tera Term, it works fine:

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

、:

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適切のみ\rなしget_fan ?を送信し、上記get_fan ?コマンドが、Pythonコードを処理するために、HOST MCUのために必要とされています。

\r、さらには\nを埋め込む方法はありますか? 私はtelnetlib.pyで手がかりを探していますが、おそらく解決策は簡単です。可能であれば、あなたのご意見をお待ちしております。ありがとう!

+0

'get_fan?\ r'を' send rs232:1'コマンドに送る/渡したいと思うのなら、一重引用符で囲んでみてください。 '\ r 'の' \ r'をエスケープします。 を入力してと入力する場合は、「\ n」を使用してみてください。ルーターのいくつかのモデルを除いて、私が遭遇したすべてのtelnetサーバーは、 "デフォルトの" telnet改行文字 "\ n"を使用していました。 –

+0

こんにちはLohmar。ご意見ありがとうございます。私はあなたのポイントを見て、私は完全にあなたのポイントを取る。問題は、telnetlib.pyが送信されるデータに「\ n」を見つけたら、これを解釈してtelnetデータを送信するか、ソケットをフラッシュします(私が思う)。私は誓い、私は数日間このことを強調しており、私はその解決策を見つけました。私は答えを投稿します。 – bluesclues

答えて

0

これを解決するには、「文字列リテラル」という概念を使用します。私は明確にするため+連結を使用しますが、'\r'rを追加すると、キャリッジリターンを防ぐ

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

:私はちょうどこのリンクを手掛かりにhttps://docs.python.org/2.0/ref/strings.html

を走った私は最初から使用している必要があり、正しいコードがありますこれはtelnetエスケープシーケンスとして解釈されないため、telnetデータの文字列として送信されます。第2のキャリッジリターンと改行は、ソケットをフラッシュしてtelnetデータを送信するエスケープシーケンスとして解釈されるためには、間違いなく必要です。

関連する問題