Linux端末などにアクセスしてコマンドライン上で操作を行うことはよくあります。何かの作業で定型化した操作を行うこともままあります。Pexpeectでコードを組むと自動化処理を作れます。PexpectはLinuxコマンドのexpectの様なことをするPythonモジュールです。
Pexpect version 4.7 — Pexpect 4.7 documentation
接続コードはシンプルです。ただ使うだけなら次のコードで大丈夫ですが、gitやら何やらに上げると大惨事です。そういう時はid, passwordは設定ファイルなり実行時の引数なりで渡すようにしましょう。
1 2 3 | child = pexpect.spawn( 'ssh user@example.com' ) child.expect( 'password' ) child.sendline( 'mypassword' ) |
Common problems — Pexpect 4.7 documentation
とりあえずの作りなら対話は次の様になります。コマンドを送る、入力可能状態になるまで待つ、の繰り返しです。
1 2 | child.expect( 'user@example.com.*' ) # 入力可能状態(左側にユーザ名とディレクトリが見えるアレ)であることを期待する child.sendline( 'telnet localhost %d\r' % telnet_port # コマンドを送る |
あくまで対話なので対話先で改めて対話先のローカル線用対話プログラムを開始することもできます。というかかなり広範囲のことができます。Linuxを深く知らない自分の範囲では何でもできるぐらいの感じです。Pexpectはコマンドライン上のプログラムのテスト、サーバやマイコン設定のデプロイ、ncとか使ってペネトレーションテストなど様々な使い道があります。
公式ドキュメントのExamples — Pexpect 4.7 documentationにはプログラムとしてほぼ完成の状態の例があるのでそれを改造すると理解が早まり、すぐ実践ができます。