从scala进程流stdout

nfs*_*ake 7 scala

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

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) = ???
    })
  }
}
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

atl*_*ine 2

告诉 python 不要缓冲 scala 中的输出-u将帮助你:

var cmd = "python -u python_test.py"
Run Code Online (Sandbox Code Playgroud)