Scala:捕获交互式外部进程的stdout/stderr
我试图从需要用户输入的外部进程捕获stdout和stderr流。到目前为止,我的工作重点是使用Scala:捕获交互式外部进程的stdout/stderr,scala,process,stdout,Scala,Process,Stdout,我试图从需要用户输入的外部进程捕获stdout和stderr流。到目前为止,我的工作重点是使用scala.sys.process包中提供的工具。我可以让用户交互或流捕获正常工作,但不能同时让两者同时工作。我添加了一个简单的测试用例,其中包含这两种行为的示例。我怀疑我没有正确连接输入/输出流,但我有点迷路了 import scala.sys.process._ object Test extends App { val processLogger = ProcessLogger( (
scala.sys.process
包中提供的工具。我可以让用户交互或流捕获正常工作,但不能同时让两者同时工作。我添加了一个简单的测试用例,其中包含这两种行为的示例。我怀疑我没有正确连接输入/输出流,但我有点迷路了
import scala.sys.process._
object Test extends App {
val processLogger = ProcessLogger(
(out: String) => println(s"OUT: $out"),
(err: String) => println(s"ERR: $err")
)
val cmd = "sbt new scala/scala-seed.g8"
// Allows user interaction but doesn't allow capture of stdout/stderr
val exitCode1 = cmd.run(connectInput = true).exitValue()
// Allows stdout/stderr capture but user input prompt is not displayed
val exitCode2 = cmd.run(processLogger, connectInput = true).exitValue()
}
第二次尝试不会中继用户提示,因为
ProcessLogger
IO是逐行处理的。没有以新行字符结尾的用户提示不是一个完整的行,ProcessLogger
在进程提供新行或终止之前不会看到它。不幸的是,我不知道是否有办法解决这个问题。您可以使用以下命令来执行-->>cmd!进程记录器