Scala进程:重定向的stdout和stderr总是被延迟

时间:2014-12-12 00:51:59

标签: scala process

我正在编写一个简单的应用程序,它执行外部命令(需要很长时间才能运行),同时实时将其输出重定向到另一个地方。但是,无论我做什么(见下文),stdout和stderr的输出似乎总是延迟(20秒到1分钟)。我怀疑Scala只会在累积到一定量时重定向输出,但我不知道它是如何工作的。有什么方法可以解决这个问题吗?

我试过了

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

var p = Seq("somecommand",blah) run ProcessLogger((o:String)=>{println(o)},(e:String)=>{println(e)}) // Same problem

var p = Seq("somecommand",blah) run ProcessIO(...) //manipulate java.io.InputStream directly, print each byte once it is immediately available. Same problem as above.

2 个答案:

答案 0 :(得分:2)

如何在每行之后刷新()stdout(或一些可配置的行数

Console.flush(); 

所以:

var lines = Seq("somecommand",blah) lines_!
dosomethingelse(lines.map{e=>println(e);Console.flush(); e})

答案 1 :(得分:0)

原来这是因为执行的命令存在潜在的stdout问题。 Scala函数都能正常工作。