我使用以下代码从Java执行脚本。从Runtime.getRuntime()。exec()逐行获取STDOUT而不是所有的一次
try (BufferedReader input = new BufferedReader(new InputStreamReader(Runtime.getRuntime()
.exec("ruby test.rb").getInputStream()))) {
String line = null;
while ((line = input.readLine()) != null) {
System.out.println("Got line: " + line);
}
}
哪里test.rb
很简单:
puts "one"
sleep 1
puts "two"
的问题是,所有的输入同时到达的BufferedReader
。两条线之间应该有1秒的延迟。脚本中的每行之后是否有刷新Inputstream
的方法?
我试图完成
我想打电话从Java GUI一些Ruby脚本,并有脚本的输出逐步显示在一个textpane。使用上面的代码,脚本中的STDOUT会在脚本终止时立即显示在文本窗格中(并且可能会刷新Inputstream
)。
编辑:
问题是Ruby缓冲STDOUT。通过$stdout.sync = true
修复。
将'$ stdout.sync = true'添加到您的ruby脚本中。 –
@SotiriosDelimanolis就是这样。非常感谢。我知道它必须是这样的。 – cilki