Help us understand the problem. What is going on with this article?

scala.sys.processでリターンコードだけ受け取る

More than 5 years have passed since last update.

 外部のプロセスを呼び出すとき、「標準出力・エラーには何も出さず、ただリターンコードだけ取りたい」という場合があります。しかし、scalaでこれを実現するスマートな方法がよく分かりません。#>は標準出力しか変えられないようですし (仮に変えられるとしても、どこに変えればいいんでしょう… /dev/null?)、ちょっと困りました。

 そこでとりあえず、出力先のロガーをでっち上げる力技で解決しています。

import scala.sys.process.{ProcessLogger, Process}

def exitCode(target: String) =
  Process(target) ! new ProcessLogger {
    def out(s: => String) {}
    def err(s: => String) {}
    def buffer[T](f: => T): T = f
  }

「詳しい話はよく分からないが、これでとりあえず動く」という理想的状態ですね!
 もっとマシな方法が見つかったならば追記します。

追記

 コメント欄で教えて頂きましたが、標準エラーを捨てるためにロガーを渡すアイデアはドキュメントにもあります。だとすると、方向性としてはこれが最適なのかもしれません。
 ただし具体的な方法としてはapplyを使うべきです。

def exitCode(target: String) = Process(target) ! ProcessLogger(str => ())

 このくらい短く書けるなら、面倒はなさそうです。

※ scalaのドキュメント、上部のタイトルをクリックすることでオブジェクト ⇔ トレイトの情報が交互に表示されるんですね… いま初めて気が付きました

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away