widget.system

ダッシュボードでwidget.systemを使用するには、「widgetの属性」にて「コマンドラインアクセスを許可」にチェックを入れておかなければならない。じゃないとwidget.systemがundefinedだぜって怒られてハマる。
widget.systemの第二引数にはコマンド終了時に実行させたい関数を渡しても良い。今はめんどうなので無名オブジェクトを入れとく。出力先はid="ping_out"なテキストフィールド。onreadyoutputに関数は、コマンドが標準出力に出力する度に実行する関数を指定する。pingは10秒後に停止させる。

  var outputElem = document.getElementById("ping_out");
  var cmd = widget.system("/sbin/ping localhost",{});
  cmd.onreadoutput = function(ping_out){
    outputElem.value = ping_out;
  }
  setTimeout(function(){cmd.cancel()},10 * 1000);

widgetのタイマを使って無限ループをさせると、hide時にタイマが停止するのでリアルタイムに情報が取れない。
コマンドラインObjective-Cプラグインを使用すればそれを回避することができる。podcastを再生するwidgetはhide時も再生されているし、ここでやったpingも実行されている。


[追記]Dashcodeのウィジットテンプレートの「ゲージ」にあるCommandMonitor.jsも後で見てみよう。