【发布时间】:2017-11-15 15:52:20
【问题描述】:
我正在使用以下代码从 Java 执行脚本。
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 脚本,并让脚本的输出逐渐显示在文本窗格中。使用上面的代码,脚本中的 STDOUT 在脚本终止时立即显示在文本窗格中(并且Inputstream 可能已刷新)。
编辑:
问题是 Ruby 正在缓冲 STDOUT。由$stdout.sync = true修复。
【问题讨论】:
-
将
$stdout.sync = true添加到您的 ruby 脚本中。 -
@SotiriosDelimanolis 就是这样。太感谢了。我知道它必须是这样的。
标签: java process inputstream stdin bufferedreader