是否有任何Scala内置类用于捕获外部进程的输出?

时间:2010-01-28 16:30:11

标签: scala process

由于Scala有很多很酷的东西,我认为它可能有一些东西可以让捕获流程的输出变得容易。我知道Java的做法,但我想要另一种方式。

3 个答案:

答案 0 :(得分:5)

scala> scala.tools.nsc.io.Process("ls -1 /tmp | wc").stdout foreach println
      41      63     770

或者有一个repl命令:

scala> :sh cat /etc/passwd | wc
stdout: List[String] = List(      65     185    3667)

使用2.8发送任何IO代码将需要克服比我能够击败的更多停止能量,所以我把它全部放在编译器中。 scala.tools.nsc.io中有很多相当有用的东西。

答案 1 :(得分:5)

从Scala 2.9开始,你可以这样做:

import scala.sys.process.Process
println(Process("uname -a").!!.contains("x86_64"))

答案 2 :(得分:3)

即使说Java这样做也不太正确,因为在不同的操作系统上处理/流处理不同,大部分功能实际上都传递给本机代码。

一个更有趣的问题是询问Scala是否有任何方法可以更加“惯用”地与读者和作者(或者如果你使用NIO功能包装你的流的渠道)

答案是什么?

目前scala IO库正在进行基于2.8的工作,这几乎肯定会包含一种更好的方式来处理流和通道,但目前还没有。

在处理exec()进程时,您可能还会发现actor更好地处理使用一个线程进行输入和一个线程进行输出的常见做法。