2016-11-06 4 views
0

私は、pythonを使用して信号発生器を制御しようとしています。私はちょうど振幅とfrequency.`myコードは以下の通りです変更する必要があります。ESG信号発生器へのTelnetセッション

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とアンプを変更することができていますが、上記のスクリプトを使用していません。デバッグセッションを示しtelnet接続が成功すると、それはコマンドを送信しましたが、何もsigを将軍に変化しないはあなたに感謝

+0

各コマンドの後にプロンプ​​トが表示されるのを待つ必要があります - おそらくすべてが速すぎて、コマンドを処理する前に接続を閉じるのでしょうか? – Mikkel

+0

私は待って、それは動作しませんでした。おかげで – sam

+0

トピックオフビットが、私は正常に似たタスクを行うと呼ばれるツールを使用している。あなたがPythonを使用しなければならないなら、仕事を終わらせてもいいかもしれません。https://en.wikipedia.org/wiki/Expect – Mikkel

答えて

0

テスト

私は聞いてncに対するあなたのコードを実行した、とPython 2.7があることを訴えtelnetlib.Telnet(HOST, PORT , timeout, Debug)への呼び出しが間違っていた - パラメータDebugが省略されているはずです。

実際、​​にデバッグパラメータが存在しない。

Telnet.open(ホスト[タイムアウト]、ポート[、])

Connect to a host. The optional second argument is the port number, which defaults to the standard Telnet port (23). The optional 

タイムアウトパラメータはタイムアウトでの指定します接続試行のような操作をブロックするための秒数(指定されていない場合は、グローバル のデフォルトのタイムアウト設定が使用されます)。

Do not try to reopen an already connected instance. 

Changed in version 2.6: timeout was added. 

は一度ただし、コマンドはrawモードにし、あなたのコードでのtelnetにより、同一送信された、という固定しました。何か変わったタイミングかもしれませんが、それ以外はうまくいくはずです。

ちょうど私があなたの場合、私はまだtcpdumpを実行します。

旧答え

あなたは、コマンドを終了していないので、彼らは実行取得されていません。 .write()does not auto-terminateコマンド。

tn.write('FREQ 1.92ghz' + "\n") 

また、終了する前に、回答を待つようにしてください。

tn.read_until("some answer", timeout) 
tn.close() 
+0

コマンドをタイプしたようですが、return/enterを押さなかったのです。 "\ n"はリターン/入力です。 – Waxrat

+0

あなたがコマンドを送信し、答えを待っているなら*それは*働くべきです。 telnet交渉が何かを崩壊させる可能性がある。2台のマシン間でパケットを盗聴して、TELNETセッションとコードの間に違いがあるかどうかを確認してください。生のターミナルモードで接続する可能性が高いので、何もないはずです。 – LSerni

1

私はそれを理解します。私は各コマンドの後に\ n \ nだけでなく、\ r \ nを追加する必要があります。この変更を実装すると、Sig Genの値が変更されました。スクリプトを更新しました。ありがとう

+0

ようこそ。それはうまくいった:-) – LSerni

関連する問題