paramikoモジュールが激しく便利だった件
最近Pythonあまり書いてなくて、復習がてら書いてみたのですが、その際paramiko: ssh2 protocol for pythonが便利だったので、ご紹介。
リモートホストに対してなんらかの処理を行いたい場合、スクリプトで書くとなると、シェルスクリプトでもできますが、例外処理が色々めんどいので、paramiko使ってみたという話し。
シェルスクリプトで実装する場合は、sshでまず接続できるか、接続先に対してタイムアウトの設定がされているか、出力は接続先の端末に持たせるか、実行側で受け取るか、KILLシグナル等受け付けられるか、あたりは入れておいた方がよいかなと思いますが、楽してparamikoとwithに任せてしまいました。
コードはこんな感じ。
流れとしては、
- コンストラクタで最低限の初期化
- __enter__, __exit__を使って、withでディクリプタの処理を任せる
- 接続用の関数作成
- それを用いて、出力を受け取る関数作成
というシンプルなものです。withステートメント使えるのは2.6からなので、2.5であれば「from __future__ import with_statement」として__future__モジュールを使ってください。それ以下はopen, closeしませう。
withを使って簡略化してるものの、鍵・ポートの指定や、標準出力・標準エラー出力は全てparamikoが楽させてくれるので、おぉと思ってしましました。
ざっくり書いただけなので、もうちょっと書くなら、argparseで引数処理をしたりしてもいいかなーとは思います。あとはテストですね(レガシーコード…)…
ライブラリで多くのパラメータが既に用意されてるので、そちらを使った方がフルスクラッチよりは効率がよいかと。フルスクラッチよりも多くの人のレビューが入るでしょうし。
とは言いつつ、実際はtomahawkのお世話になってばかりですし、GNU ParallelやFabricなどもありますので、勉強ということで。
リモートホストに対して、色々やるというのは勉強になるなぁと思った次第です。