代码之家  ›  专栏  ›  技术社区  ›  Geo

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

  •  7
  • Geo  · 技术社区  · 15 年前

    因为scala有这么多很酷的东西,我想它可能有一些东西可以让捕获一个进程的输出变得容易。我知道Java的方式,但我想到了另一种方式。

    3 回复  |  直到 14 年前
        1
  •  5
  •   psp    15 年前
    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中有很多相当有用的东西。

        2
  •  5
  •   Chris Oei    14 年前

    从scala 2.9开始,您可以执行以下操作:

    import scala.sys.process.Process
    println(Process("uname -a").!!.contains("x86_64"))
    
        3
  •  3
  •   Kevin Wright    15 年前

    甚至说Java这样做是不正确的,因为不同操作系统上的进程/流处理不同,许多功能实际上都被传递到本机代码。

    接下来一个更有趣的问题是,询问scala是否有任何方法可以更“惯用”地与读者和作者(或者,如果您使用NIO功能包装流,则询问通道)一起工作。

    答案是什么?

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

    在处理exec()d进程时,您可能还会发现actors是处理使用一个线程作为输入和一个线程作为输出的常见做法的更好方法。

    推荐文章