なんとなく思い立って,なんとなく作り始めた.
作るにあたって,いろんな言語を候補に上げたけど,近々勉強しようかなと思ってた Python を使うことにした.
5時間で取りあえず(何をつぶやくかは別として)まともに動くようにはなったけど,まだまだ課題は沢山ある状態.
Python のパの字も知らない状態から作り始めたので,何もかもが手探り.
変数にはどうやって代入するだとか,if -else 文とかの書き方だとか,何かにぶつかる度にグーグル先生に尋ねて…を繰り返した.
でも公式のドキュメントが秀逸すぎてグーグル先生に頼る回数が少なかった.大概,公式のドキュメントを引けばわかる.
そうして順調に作っていけてたのだけど,シェル上でコマンドを実行し,その出力 (stdout) を取得する部分で思いの外難航.
初め,自分が激しく勘違いしていたことからエラーを吐き,ようやくそれが直ったかと思えば今度は “非推奨モジュール” の表示が.
どうやら,自分が参照していたのは古い記事やレファレンスだったらしく,最新版では非推奨化されたモジュールをそのまま使ってしまっていた.
import popen2 (child_stdin, child_stdout) = popen2.popen2("cmd") for l in child_stdout print l
この “popen2″ モジュールが非推奨モジュール.最新版の2.6では,”subprocess” モジュールへ変更されている.
from subprocess import Popen, PIPE p = Popen(["cmd"], shell=True, stdin=None, stdout=PIPE, close_fds=True) for l in p.stdout print l
行末に “; (セミコロン)” をつけなかったり,if 文の書き方が違ったり,今までは似たよった言語ばかり勉強してきたものだから,新鮮だ.はやく物に出来るようになりたい.
.
次の日朝から用事があるのに,夜通しかけてサーバーの uptime を取得,整形して post するスクリプトを組んだ.
それで,取りあえず形にはなって満足して寝た.が,朝起きてみると cron からエラーメールが.
シェルから取得した uptime の解析に失敗したようだ.uptime のいろいろと変わる書式に対応したつもりが,出来てなかったっぽい.
今日はこれから神戸に行くので,土曜日まで放置.うーん.何がおかしいのか…
正規表現はこんな感じ.
起動日数 -> 'up (d+) days' 起動時間 -> '(d{1,2}):(d{1,2}), +d+ user'