我正在使用以下代码从 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 脚本,并让脚本的输出逐渐显示在文本 Pane 中。使用上面的代码,当脚本终止时,脚本中的 STDOUT 立即全部显示在文本 Pane 中(并且 Inputstream
可能被刷新)。
编辑:
问题是 Ruby 正在缓冲 STDOUT。由 $stdout.sync = true
修复。
最佳答案
你在 System.out.println() 之后试过 Thread.sleep(1000) 吗?您必须捕获一些 InterruptedException。您的编辑肯定会告诉您。
关于java - 从 Runtime.getRuntime().exec() 逐行而不是一次获取 STDOUT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44528771/