pexpectの基本的な使い方
pexpectはTelnetやSSHで実施するような対話形式の作業を自動化するPythonのライブラリです。
pexpectでは、expectで指定する正規表現をうまく設計しないと思わぬ結果を招き、デバッグ作業に時間を取られることがあります。REST APIなどを利用したAPIベースの自動化手法と比較して使いやすいとは言えません。
しかしちょっとした手作業をPythonから自動化したいときには役に立つので知っておくとよいでしょう。
インストール
pip install pexpect
Import
import pexpect
基本的な使い方
connection = pexpect.spawn("ssh user@1.1.1.1 -p 1000", timeout=10, encoding='utf-8') connection.expect("password:") connection.sendline("my_password") connection.expect("user#") connection.sendline("exit")
spawnで対象機器に接続します。 「-p」はポート番号です。
expectで機器から特定の文字列が送信されてくるのを待ちます。受信した文字列は後述する方法で取得することができます。
sendlineで文字列を送ります。
接続を終了するときは「exit」を送るのが一般的です。
受信した文字列の取得
expectでマッチするまでの文字列
print(connection.before)
内容はexpectしている文字列次第ですが一般的にはsendlineで投入したコマンドとその出力結果が含まれます。 プロンプトは含まれていないことが多いです。
expectでマッチした文字列
print(connection.after)
一般的にはプロンプトが含まれます。
うまく動かないとき
意図しない箇所でexpectがマッチしている可能性が高いです。 出力内容を精査し、正規表現を見直しましょう。
結果に含まれる改行コードが「\r\n」か「\n」かもデバッグ等で確認するとよいです。