2017-03-17 13 views
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) 
+0

を私がPythonプログラムを修正することを検討してお勧めします*ありません*バッファ出力。 Pythonプログラムが出力をバッファリングすると、最後に出力されるだけなので、ScalaプログラムはPythonプログラムが印刷していないものを読み取ることができません。 – radumanolescu

+0

@radumanolescu私はpythonプログラムを変更することはできません。なぜなら、それは異なる人々によって提出することができるからです。 – nfsquake

答えて

2

お手伝いを致します-uでScalaでは、あなたの出力をバッファリングしないのpythonを教える:

var cmd = "python -u python_test.py" 
関連する問題