Stream stdout from scala Process



我正在使用scala Process来启动python程序,并使用ProcessLogger从python程序中捕获stdout。我看到 python 程序中的 print 语句仅在 python 程序完成后打印。有没有办法在执行python打印语句时流式传输它们?

import scala.sys.process.{ProcessLogger, _}
object TestProcessStdOut {
  def main(args: Array[String]) {
    var cmd = "python python_test.py";
    val process = Process(cmd).run(new ProcessLogger {
      override def out(s: => String) = println(s)
      override def buffer[T](f: => T) = ???
      override def err(s: => String) = ???
    })
  }
}

python_test.py

import time
print("print data 1")
time.sleep(2)
print("print data 2")
time.sleep(2)
print("print data 3")
time.sleep(2)

告诉 python 不要用 -u 在 scala 中缓冲你的输出,这将有助于你:

var cmd = "python -u python_test.py"

最新更新