scalaでコマンド叩くときのエラー
参考資料
- 公式ドキュメント
- http://kmizu.hatenablog.com/entry/20110510/1304985703
- http://www.mwsoft.jp/programming/scala/scala_process.html
エラー制御
エラーが2パターンある。
1、 コマンド自体実行できないと例外(IOException)が飛ぶ
scala> Process("foo").! java.io.IOException: Cannot run program "foo": error=2, No such file or directory at java.lang.ProcessBuilder.start(ProcessBuilder.java:1041) at scala.sys.process.ProcessBuilderImpl$Simple.run(ProcessBuilderImpl.scala:69) at scala.sys.process.ProcessBuilderImpl$AbstractBuilder.run(ProcessBuilderImpl.scala:98) at scala.sys.process.ProcessBuilderImpl$AbstractBuilder.run(ProcessBuilderImpl.scala:97) ... 33 elided Caused by: java.io.IOException: error=2, No such file or directory at java.lang.UNIXProcess.forkAndExec(Native Method) at java.lang.UNIXProcess.<init>(UNIXProcess.java:135) at java.lang.ProcessImpl.start(ProcessImpl.java:130) at java.lang.ProcessBuilder.start(ProcessBuilder.java:1022) ... 36 more
2、 コマンド実行後の失敗は例外飛ばず、デフォルトだと標準エラー出力
scala> Process("ls /foo").! ls: /foo: No such file or directory res11: Int = 1
例外のほうはTryでなんかすればいいとして、
標準エラー出力をロギングしたいときは、ProcessLoggerを使う。
def plogger = ProcessLogger(identity, logger.error(_)) Process("ls /foo") ! plogger