Я пытаюсь перехватить потоки 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()
}