scala - 如何在 Scala 中捕获进程的输出

标签 scala

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

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

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

最佳答案

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

这对我们有用:

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)

关于scala - 如何在 Scala 中捕获进程的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56338343/

相关文章:

java - 我可以在 Java 代码中使用 Scala 标准库吗?

parsing - 不区分大小写的 Scala 解析器组合器

scala - Shapeless 在通用上下文中不起作用

java - SBT 不添加非托管 JAR

scala - 继承和自递归类型推断

scala - 如何为 Spark 结构化流编写 JDBC Sink [SparkException : Task not serializable]?

scala - 如何将 JNothing 序列化为 null

scala - 使用 Shapeless Polyfil 在记录上进行一般映射

scala - 如何匹配函数签名而不在 Scala 中收到类型删除编译器警告

scala - 有没有办法关闭Scala编译器的尾递归优化?