読者です 読者をやめる 読者になる 読者になる

カイワレの大冒険 Third

技術的なことや他愛もないことをたまに書いてます

paramikoモジュールが激しく便利だった件

プログラミング プログラミング-Python

最近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 ParallelFabricなどもありますので、勉強ということで。

リモートホストに対して、色々やるというのは勉強になるなぁと思った次第です。