「予想」スクリプトを作成するには:
IPアドレスのリストを繰り返し、各アドレスを記録してコマンドを実行します(BASH forループと同様)。これで、Expectスクリプトの数行をコピー/貼り付け、各デバイスの固有IPを手動で入力しました。それほど効率的ではありません。
Expectはユーザー入力を受け取り、変数に書き込みます(例:BASHの「読み取り」)。次のタスクを実行するスクリプトを作成したいと思います。 「ルーターのIPアドレスを入力してください。」 「確認したいルーターのポートを入力してください。」次に、Expectを起動し、そのIPアドレスにSSHを適用し、そのルーターを使用していくつかのコマンドを実行します。ポート。
答え1
「Exploring Expect」に戻り、一部のexpect
文が失敗した場合、expect
それをファイルの終わりとして処理して終了し、スクリプトも終了することを発見しました。だから私は単に次のように付け加えました。
expect {
{eof} {action_here}
}
効果がある
答え2
この質問は、言及されたスキルに固有のものではなく、目標指向であるため、私の精神に基づいて解決しようとしています。私はPythonを使います。
回答:質問1:
デフォルトでは、ファイル内のIP /アドレスを解析し、各IPアドレスに対して目的の(類似した)前後シーケンスを実行したいように聞こえます。
除外スクリプトでIPアドレスを解析する代わりに、Pythonを使用してファイルからIPアドレスを解析し、各IPアドレスに対して同じExpectコマンドを実行しようとしています。
したがって、ループ内の各ipaddressに対して変数に異なるipaddressを割り当て、Expectコマンドを実行できるように、ipaddressを変数として使用してExpectコマンドを作成する必要があります。
「expect」のような関数については、「pexpect」ライブラリを見てください。これは、Pythonスクリプトに期待のような関数を公開するPythonモジュールです。 (例と他の文書/例へのリンクを含むこの回答を参照してください。https://stackoverflow.com/a/11160553/1248361)。具体化しよう:
上記のリンクの例を見ると、予想されるシーケンスが """で始まることに注意してください。
child = pexpect.spawn('パスワードが必要なコマンド') child.expect('パスワードを入力してください') child.sendline('password')
""" pexpect.spawnメソッドの文字列パラメータをpexpect.spawn('ipaddressをオプションとして使用するパスワードを必要とするいくつかのコマンド' + ipaddress_variable)で簡単に置き換えることができます。
したがって、Pythonでは可変パラメータを使用して、forループが繰り返されるたびに変更されるパラメータとしてシーケンスの一部を期待する関数を定義します。
次のとおりです(医師コードです)。
def Expect_function(ipaddress_variable): pexpect.spawn('パスワードを必要とするいくつかのコマンド' +ipaddress_variable) child.expect('パスワード入力') child.sendline('password') child.expect..... (これはどこにありますか?)リモートシステムで実行する必要があるタスクを引き継ぎます。)
(申し訳ありませんが、フォーマット、プリセット、コードは私の期待に満ちていませんでした。)
関数が定義されると、残りは簡単です。
IPアドレスを繰り返して、次の疑似コードのように関数を呼び出すだけです。
ipfile の ipaddress の場合: Expect_function(ipaddress)
2番目の問題もPythonで処理します。