从Runtime.getRuntime()。exec()获取STDOUT,而不是一次性获取

时间:2017-06-13 18:17:38

标签: java process inputstream stdin bufferedreader

我正在使用以下代码从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会立即显示在textpane中(并且Inputstream可能已刷新)。

编辑:
问题是Ruby正在缓冲STDOUT。由$stdout.sync = true修正。

1 个答案:

答案 0 :(得分:-1)

您是否在System.out.println()之后尝试了Thread.sleep(1000)。你必须捕获一些InterruptedException。你的编辑肯定会告诉你。