Scala进程:重定向的stdout和stderr总是延迟
我正在编写一个简单的应用程序,它执行一个外部命令(需要很长时间才能运行),同时将其输出实时重定向到另一个地方。然而,无论我做什么(见下文),来自stdout和stderr的输出似乎总是延迟(20秒到1分钟)。我怀疑Scala只会在输出累积到一定量时重定向输出,但我不知道它在引擎盖下是如何工作的。有办法解决这个问题吗 我试过了Scala进程:重定向的stdout和stderr总是延迟,scala,process,Scala,Process,我正在编写一个简单的应用程序,它执行一个外部命令(需要很长时间才能运行),同时将其输出实时重定向到另一个地方。然而,无论我做什么(见下文),来自stdout和stderr的输出似乎总是延迟(20秒到1分钟)。我怀疑Scala只会在输出累积到一定量时重定向输出,但我不知道它在引擎盖下是如何工作的。有办法解决这个问题吗 我试过了 var lines = Seq("somecommand",blah) lines_! dosomethingelse(lines.map{e=>println(e)
var lines = Seq("somecommand",blah) lines_!
dosomethingelse(lines.map{e=>println(e);e}) //problem: does not print line by line! It prints a lot of lines each time
及
及
在每行(或一些可配置的行数)之后刷新stdout怎么样
Console.flush();
因此:
事实证明,这是因为执行命令时存在一个潜在的标准输出问题。Scala函数都能正常工作
var p = Seq("somecommand",blah) run ProcessIO(...) //manipulate java.io.InputStream directly, print each byte once it is immediately available. Same problem as above.
Console.flush();
var lines = Seq("somecommand",blah) lines_!
dosomethingelse(lines.map{e=>println(e);Console.flush(); e})