1

さまざまな IP アドレスをリストした csv ファイルを読み取ることで、複数のデバイスに順次ログインできる Python スクリプトを作成しました。そこから、スクリプトを介してデバイスに渡されるいくつかのコマンドの内容を含む各デバイスのファイルを出力します。だから私はかなり遠くまで来ました。私が直面している問題は、スクリプトが時々ハングすることです。これは、一部のデバイスのソフトウェア リビジョンが異なり、デバイスに渡される特定のコマンドをサポートしていないためです。私が注目している違いは、ログイン後のプロンプトです。たとえば、デバイス タイプ A にログインすると、xyz# のコマンド プロンプトが表示されます。デバイス タイプ B には、コマンド タイプ abc: があります。メーカーは同じですが、モデルやソフトウェアのリビジョンが異なるだけです。コマンド プロンプトによっては、スクリプトをハングアップさせずにそのデバイスで実行できるコマンドを知っています。

それが役立つ場合は、コードの一部を投稿できますが、本当に知りたいのは、これが可能かどうかです。もしそうなら、そうポインタ。私が試すかもしれないことについてのいくつかの提案。Python を数か月使用した後、これを行う方法が必要であることがわかりました。他の人の投稿に取り組み、実用的なソリューションを開発できるため、通常は投稿しません。しかし、私はこれに少し取り組んでいて、それをつなぎ合わせることができなかったので、私は助けを求めています.

-シェーン

編集

この時点では、まだコマンド プロンプトを決定するコードを書くことができません。少なくとも、telnet セッションが稼働している間は。telnet で接続し、いくつかのコマンドを実行して、セッションを閉じることができます。その後、結果をファイルに書き込むことができます。そして、そこからファイルを読んでプロンプトを決定します。しかし、理想的には、telnet セッションを開き、コマンドを実行してセッションがまだ開いている間にプロンプ​​トを決定し、セッションが起動している間にそれを読み取り、プロンプトに基づいて特定のコマンドを実行できるようにしたいと考えています。

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

telnet セッションを閉じ、データをファイルに書き込み、それを読み取ってプロンプトを判断し、スクリプトのログイン部分をもう一度ループバックする必要があるという事実を受け入れる必要がありますか? または、何か不足していますか?私の説明で明確になっているかどうかはわかりません。

4

1 に答える 1

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)
于 2012-04-19T23:02:41.460 に答える