6

Telnet経由でLinuxターミナルに接続し、いくつかのコマンドを実行して出力を解析し、出力に基づいてさらにコマンドを実行するなどのPythonスクリプトを作成しています.

これは、telnetlibを使用してセットアップするのが非常に簡単でした。write(cmd + '\n') を使用してコマンドを送信し、次に read_until(prompt) を使用して出力を読み取ります。私が抱えている問題は、このセットアップが非常に遅いように見えることです。すべてのコマンドの実行には、おそらく約 100 ~ 200 ミリ秒かかります。これにより、合計実行時間は約 30 分になりますが、これは長すぎると思います。

通常の Telnet クライアントを使用して端末に接続すると、実行しようとしているコマンドはほぼ即座に返されます。また、約 20 個のコマンドを実行する小さな bash スクリプトも作成しました。これもほぼ瞬時に返されます。また、telnetlib の他の読み取り関数 (read_very_eager() など) をいくつか試しましたが、改善はありませんでした。

なぜこのセットアップが非常に遅いのか、それについて私にできることがあれば誰でも知っていますか?

4

1 に答える 1

1

私はあなたが持っていたのと同じ問題を抱えていました.「read_until」を行っていましたが、あるマシンでは非常に遅く、別のマシンでは高速に動作していました.コードを「read_very_eager」に切り替え、以下の例のようにリクエストの間に小さな一時停止を入れました. これで、私のコードはどこでも同じ速度で動作します。応答の一部が欠落している場合は、変数「待機」を大きくしてみてください。

tn = telnetlib.Telnet(host)
wait=0.1

sleep(wait)              # wait for greeter
tn.read_very_eager();    # optional step
tn.write(PASSWORD+"\n")  # send password
sleep(wait)              # wait for prompt
tn.read_very_eager()     # optional step

tn.write("write some ting\n") # send your request
sleep(wait)                # wait for response to become available
print tn.read_very_eager() # read response IF you need it otherwise skip it
tn.write("write some thing else\n") # send your request
sleep(wait)                # wait for response to become available
print tn.read_very_eager() # read response IF you need it otherwise skip it
tn.write("exit\n")         # optional step
tn.close()                 # close connection
于 2012-11-10T14:42:08.240 に答える