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

结果在控制台中打印,但不是通过println打印

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

最佳答案

尝试使用beeline时,我们遇到了类似的情况。

这为我们工作:

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)

07-24 19:40