1

scala.sys.processグラフの DOT 記述を送信dotし、バイナリ イメージへの変換を取得するために使用したいと思います。

val process = "dot -T" + format
val inputStream = new ByteArrayInputStream(dot.getBytes("UTF-8"))
process #< inputStream !!

これは問題なく動作しますが、ではなく を!!返します。文字列ではなくバイト単位で応答を取得するにはどうすればよいですか? バイナリデータは有効な文字列を記述しないため、文字列を中間表現として使用できるとは思いません。StringArray[Byte]

4

2 に答える 2

1

Scala Process IO は優れていますが、自分がやりたいことを行う方法を理解するのはいつも難しいと感じています。この例が他の人に役立つことを願っています。適切なブードゥー教を見つけたら、私が望んでいたことは非常に簡単でした. dotパラメータを に取り、プロセスを実行する関数を次にInputStream示しOutputStreamます。

  def dotbin(format: String)(dot: String): Array[Byte] = {
    val process = "dot -T" + format
    val bos = new ByteArrayOutputStream()
    val exitCode = process #< new ByteArrayInputStream(dot.getBytes) #> bos !< ProcessLogger(s => ())
    if (exitCode == 0) {
      bos.toByteArray()
    }
    else {
      throw new RuntimeException("Nonzero exit value (" + exitCode + ") for '" + process + "' with: " + dot)
    }
  }

適切な記号を見つけると、すっきりと簡潔になります。in にfor を2.10指定する必要がないことに注意してください。ProcessLogger!<

于 2013-04-12T16:46:40.630 に答える