首页 > 解决方案 > 如何在 Scala 中捕获进程的输出

问题描述

我正在尝试sbt通过 a捕获主类启动的输出,ProcessBuilder但这不起作用。我在这里想念什么?

结果在控制台中打印,而不是由 println

val result = Seq("sbt", "runMain example.Hello")
  .#<(new ByteArrayInputStream("a".getBytes()))
  .!!
println(s"result=$result")

标签: scala

解决方案


我们在尝试使用直线时遇到了类似的情况。

这对我们有用:

val stdout = new StringBuilder
val stderr = new StringBuilder

var commandSeq = Seq("beeline"
  , "-u"
  , ConfigProvider.config.BeelineConfig.Url
  , "-n"
  , ConfigProvider.config.BeelineConfig.UserName
  , "-p"
  , ConfigProvider.config.BeelineConfig.Password
  , "--outputformat=xmlattr"
  , "-f"
  , filePath)

hiveConfArgs.foreach(arg => {
  commandSeq = commandSeq :+ "--hivevar"
  commandSeq = commandSeq :+ arg
})

commandSeq ! ProcessLogger(stdout append _, stderr append _ + "\n")

(stdout.toString, stderr.toString)

推荐阅读