我正在编写一个简单的应用程序,它执行外部命令(需要很长时间才能运行),同时实时将其输出重定向到另一个地方。但是,无论我做什么(见下文),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.
答案 0 :(得分:2)
如何在每行之后刷新()stdout(或一些可配置的行数
)Console.flush();
所以:
var lines = Seq("somecommand",blah) lines_!
dosomethingelse(lines.map{e=>println(e);Console.flush(); e})
答案 1 :(得分:0)
原来这是因为执行的命令存在潜在的stdout问题。 Scala函数都能正常工作。