Scala: захват stdout / stderr интерактивного внешнего процесса - PullRequest
0 голосов
/ 26 июня 2018

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