スクリプトの実行ログとしてファイルへの書き込みをしたい時。
PHPだと
$fp = fopen('/var/tmp/hoge.txt', 'w');
while(true) {
// action
fwrite($fp, 'actionのログ');
}
fclose($fp);
みたいにやっていた。
細かいところはおいておいて、tail -f /var/tmp/hoge.txt
とかで回しておけば、どんぐらい進んだかが一目瞭然。
で、同じような感覚で ruby で書いてみた
fp = File.open('/var/tmp/hoge.txt', 'w')
list.each do |val|
# action
fp.write('actionのログ')
end
fp.close
ログがつらつら流れることを期待して tail -f /var/tmp/hoge.txt
を叩いてみる。
が、流れてこない。
で、処理が全部終わったらドカッとログが出現。
ということは、ruby だと close するまでは実際にはファイルに書き込みをしないということか...
で、ちょいちょい調べてみたら
fp = File.open('/var/tmp/hoge.txt', 'w')
list.each do |val|
# action
fp.write('actionのログ')
fp.flush
end
fp.close
のように flush
メソッドを叩けばいけるらしい。なるほど...