7
私はscalaプロセスを使用してPythonプログラムを開始し、ProcessLoggerを使用してPythonプログラムからstdoutを取得します。 Pythonプログラムのprint文は、pythonプログラムが完了した後にのみ表示されることがわかります。それらが実行されると、Pythonのprint文をストリーミングする方法はありますか?ストリームstdout from scalaプロセス
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プログラムを修正することを検討してお勧めします*ありません*バッファ出力。 Pythonプログラムが出力をバッファリングすると、最後に出力されるだけなので、ScalaプログラムはPythonプログラムが印刷していないものを読み取ることができません。 – radumanolescu
@radumanolescu私はpythonプログラムを変更することはできません。なぜなら、それは異なる人々によって提出することができるからです。 – nfsquake