Comment detail

指定コマンドを別プロセスで起動 (Nested Flatten)

初投稿です (^o^)

標準出力と標準エラー出力はすべてを読みきる必要があります。 その際、それぞれの出力の読み取りおよび、コマンドの終了を待つ部分は Actor(スレッド)としておかなくてはいけません。

ffmpegはヘルプ表示時も標準出力と標準エラー出力の両方に書き出してきます。 終了コードを表示する部分ですが、場合によってこの例ではヘルプ出力の間にまぎれてしまうかもしれません。(^^;

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import java.io._
import scala.actors._
import scala.actors.Actor._

object exec_test extends Application {
  //------------------------------------
  val cmdline = "ffmpeg"

  //------------------------------------
  val process = Runtime.getRuntime.exec(cmdline)
  val br  = new BufferedReader(new InputStreamReader(process.getInputStream))
  val ebr = new BufferedReader(new InputStreamReader(process.getErrorStream))

  //------------------------------------
  actor { printlines(br ){ line => println(line) } }
  actor { printlines(ebr){ line => println(line) } }
  actor { println("ExitValue=" + process.waitFor) }

  //------------------------------------
  def printlines(br:BufferedReader)(f:String=>Unit):Unit = printlines(br.readLine, br, f)
  def printlines(line:String, br:BufferedReader, f:String=>Unit):Unit = line match {
    case null => ;
    case _ => 
      f(line)
      printlines(br.readLine, br, f)
  }
}

Index

Feed

Other

Link

Pathtraq

loading...