如果完成后如何调用外部进程并读取其退出代码和标准输出?
使用sys.Process
将导致异常被抛出在不同于0的退出代码上以获得成功。
答案 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。