Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala:捕获交互式外部进程的stdout/stderr_Scala_Process_Stdout - Fatal编程技术网

Scala:捕获交互式外部进程的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( (

我试图从需要用户输入的外部进程捕获stdout和stderr流。到目前为止,我的工作重点是使用
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!进程记录器