rcmdnk's blog

AppleScript: The Definitive Guide: Scripting and Automating Your Mac (Definitive Guides) 電子書籍: Matt Neuburg

AppleScriptを呼び出したりする時に ログを書き出す方法について。

AppleScriptでファイルにログを書き出す

AppleScriptは通常スクリプトエディタ.appで書くと思いますが、 スクリプトエディタではその場ですぐコンパイル、実行ができ、

1
log "test output"

みたいに、logというコマンドを使ってスクリプトエディタのコンソール部分に ログを書き出すことが出来ます。

もっとやろうとすると

1
display dialog "test popup"

と、display dialogを使うと内容をポップアップウィンドウに表示できます。

このポップアップのものはどこでも使えますが その場その場で最前面ウィンドウに出てきて止まるので スクリプトによっては全く使えないこともあります。

のでやはりlogで見たいわけですが、 スクリプトを直接実行したりBetterTouchToolとかで ショートカットキーからスクリプトを呼び出す場合には スクリプトエディタを使わないのでこのlogのアウトプットがみれません。

そこで直接外部ファイルに書き出したいわけですが、 ファイルをオープンして書き出す、的なことがAppleScriptでは出来ない(素直には出来ないと思う、多分) ので シェルコマンドを呼んでそれを使って書き出します。

AppleScriptでは

1
do shell script "echo test output >> ~/log"

の様にdo shell scriptでシェルスクリプトを実行することが出来ます。

その中でechoとかで出力してあがればOK。

これを使って簡単に出力出来る関数とかを用意してみます。

echoTest.scpt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
property DEBUG : true
property LOG_DIR : "~/log/"
property LOG_FILE : ""

-- Prepare log file
if DEBUG then
  do shell script "mkdir -p " & LOG_DIR
  set LOG_FILE to LOG_DIR & (name of me) & ".log"
  log "Log file: " & LOG_FILE
end if

-- Log output function
on echo(txt)
  if DEBUG then
    do shell script "echo '[" & (current date) & "] " & txt & "' >> " & LOG_FILE
    log "[" & (current date) & "] " & txt
  end if
end echo

-- Main content

-- Test log
echo("test output")

こんな感じ。 echoという関数で内容をファイル (この場合は~/log/echoTest.log)に出力していける様になります。

mkdirなど、AppleScriptにもmake new folderとか出来るんですが、 複数階層作る必要があったりする場合結構面倒なので シェルスクリプトでやってしまいます。

以下、Main contentより下に実際のコードを書いていって、 ログが欲しいところで

1
echo("test output")

の様に呼んであげれば、~/log/echoTest.log

[2016年10月26日水曜日 XX:XX:XX] test output

みたいな出力がなされます。

テストが終わって必要なくなれば先頭の

1
property DEBUG : true

1
property DEBUG : false

にしてあげればログを書き出さなくなります。

この Main contentより上の部分を適当なスクリプトの先頭にコピペすれば そのスクリプトでもすぐにechoが使えるようになります。

Sponsored Links
Sponsored Links

« Macのトラックパッド設定 VimでNormalモード切り替え時にIMEをOFFにする、をMacでKarabiner無しで実現する »

}