如何在Scala中运行外部进程并获取退出代码和输出?

时间:2015-04-29 06:25:54

标签: scala process external

如果完成后如何调用外部进程并读取其退出代码和标准输出?

使用sys.Process将导致异常被抛出在不同于0的退出代码上以获得成功。

3 个答案:

答案 0 :(得分:0)

你看过Process.exitValue吗?

  

返回子进程的退出值。

答案 1 :(得分:0)

(我已经在freenode #java上问了这个问题,并且如果我找到了解决方案,请在这里发帖,所以这里就去了)

简单的方法是使用sys.ProcessBuilder:

  def RunExternal(executableName: String, executableDir: String) : (Int, List[String]) = {
    val startExecutionTime = System.currentTimeMillis()

    val pb : ProcessBuilder = new ProcessBuilder (executableName)
    pb.directory(new java.io.File(executableDir))

    val proc = pb.start()
    proc.waitFor()

    val exitCode = proc.exitValue()
    val output = scala.io.Source.fromInputStream(proc.getInputStream).getLines.toList

    val executionTime = System.currentTimeMillis() - startExecutionTime

    logger.info(String.format(s"Process exited with exit code: ${exitCode}."))
    logger.info(String.format(s"Process took ${executionTime} milliseconds."))

    (exitCode, output)
  }

答案 2 :(得分:0)

尝试一下:

import sys.process._

val stdout = new StringBuilder
val stderr = new StringBuilder
val logger = ProcessLogger(stdout append _, stderr append _)
val status = "ls -al " ! logger

println(status)
println("stdout: " + stdout)
println("stderr: " + stderr)

然后您同时获得了它们:status,stdout和stderr。