java - 从 Runtime.getRuntime().exec() 逐行而不是一次获取 STDOUT

标签 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 脚本,并让脚本的输出逐渐显示在文本 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/

相关文章:

java - 如何从 .jar 中隐藏 SQL 身份验证?

c# - 性能计数器与进程

Ruby 在反引号 Shell 中转义参数

process - 剥离尾随空格的好处?

Java - 从 S3 对象逐行读取 (JSON) 数据

java - DCL 还坏吗?

java - 如何拒绝来自 iframe 的站点访问?

java - 如何在appium中打开和访问导航侧抽屉?我在appium中使用java语言进行自动化

java - 尝试从套接字读取时出现非法阻塞模式异常

java - 如何在 Java 中读取/转换 InputStream 为字符串?