2012-04-19 2 views
1

さまざまなIPアドレスをリストしたcsvファイルを読み込んで、複数のデバイスに順次ログインできるpythonスクリプトを作成しました。そこから、スクリプトを介してデバイスに渡されるいくつかのコマンドのコンテンツを含む各デバイス用のファイルが出力されます。だから私はかなり遠くに来た。私が取り組んでいる問題は、スクリプトがハングすることがあることです。これは、一部のデバイスにはソフトウェアリビジョンが異なるため、デバイスに渡される特定のコマンドがサポートされていないためです。私が重点を置いているのは、ログイン後のプロンプトです。例えば、デバイスタイプAへのログインには、xyz#のコマンドプロンプトがあります。デバイスタイプBのコマンドタイプはabc:です。それは同じメーカーで、モデルやソフトウェアのバージョンが異なるだけです。コマンドプロンプトに応じて、私はそのデバイスでスクリプトをハングアップせずに実行できるコマンドを知っています。だから、私ができる必要があるのは、成功したログイン後です。コマンドプロンプトに応じて、特定のコマンドのセットを実行します。異なるログインプロンプトを決定するPython telnetlib

私のコードの一部を投稿することができれば助かりますが、私が実際に探しているのは、これが可能な場合です。もしそうなら、ポインタ。私が試してみたいことに関するいくつかの提案。 Pythonを数ヶ月使った後、私はこれを行う方法がなければならないことを知っています。私は通常、他人の投稿を通して仕事をして解決策を開発できるので、投稿しません。しかし、私は少しこれに取り組んできたし、一緒にそれを作ることができなかったので、私はアシストのためだと思う。この時点で-Shane

EDIT

は、私はまだインクルードは、コマンドプロンプトを決定するコードを記述することができませんでしだ。少なくとも、telnetセッションが起動している間は、少なくとも。私はtelnetでコマンドを実行し、セッションを閉じることができます。結果をファイルに書き込むことができます。そこからファイルを読んでプロンプトを決定します。しかし、理想的には、私はtelnetセッションを開き、セッションが開いている間にプロンプ​​トを決定するためのコマンドを実行し、セッションが起動している間にそれを読んでからプロンプトを実行して特定のコマンドを実行できるようにしたいと思っています。

この問題は、Telnetセッションがまだ起動している間にコマンド出力を読み取れないことが原因と考えられます。セッションは閉じて、すべての出力をファイルに書き込む必要があります。次に、ファイルを読み込んでコマンドプロンプトを確認し、プロンプトに基づいて実行するコマンドを決定してから、新しいtelnetセッションを開き、それらのコマンドを実行します。

Telnetセッションを終了し、ファイルにデータを書き込み、それを読み取ってプロンプトを確認した後、スクリプトのログイン部分をもう一度ループバックする必要がありますか?または私は何かを逃していますか?私が私の記述で明確にしているかどうかは分かりません。

答えて

1

私は、共通のインタフェースを使用してコマンドを実装し、その後、私は私がに接続されていますどのようなシステムを知っているときにそれらを取得するために辞書を使用します。あなたの応答のための

# command set for system xyz# 
def copy1(src, dest): 
    pass 

def list1(): 
    pass 

# command set for system abc: 
def copy2(src, dest): 
    pass 

def list2(): 
    pass 


cmdDict = { 
    # prompt command set 
    'xyz#': [copy1, list1], 
    'abc:' [copy2, list2], 
} 

... 

# guess the right commands from the prompt we have read 
copyCommand = cmdDict[detected_prompt][0] 
listCommand = cmdDict[detected_prompt][1] 

... 

# proceed normally 

listCommand() 
copyCommand(f1, g1) 
copyCommand(f2, g2) 
+0

感謝。私はこれをスクリプトに取り込み、結果に戻ってきます。 – Shane

関連する問題