Posted by & filed under diary, programming.


なんとなく思い立って,なんとなく作り始めた.

作るにあたって,いろんな言語を候補に上げたけど,近々勉強しようかなと思ってた 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'