用java获取正在运行的bash脚本的输出

这个问题在这里已经有了答案:

  • wait()和sleep()之间的差异33个答案

  • 在你的情况下使用.wait(1000),是完全错误的。 这也是例外也告诉你的。
    确切地说,你的用例有waitFor(long timeout, TimeUnit unit)

    p.waitFor(10, TimeUnit.SECONDS);
    

    以下是解决方案的完整示例。 一个单独的线程切换主线程的标志来终止然后输出收集的行:

    private static boolean triggerToClose = false;
    
      public static void main(String[] args) throws IOException,
          InterruptedException {
        ProcessBuilder pb =
            new ProcessBuilder("/home/myscript");
        Process p = pb.start();
        java.io.InputStream is = p.getInputStream();
        BufferedReader stdInput = new BufferedReader(new InputStreamReader(is));
        String inputRead;
        new Thread(new Runnable() {
          public void run() {
            try {
              Thread.sleep(10000);
            } catch (InterruptedException e) {
            }
            triggerToClose = true;
          }
        }).start();
        StringBuilder sb = new StringBuilder();
        while ((inputRead = stdInput.readLine()) != null) {
          if (triggerToClose) {
            p.destroy();
            break;
          }
    
          sb.append(inputRead).append('n');
        }
        System.out.println(sb);
      }
    
    链接地址: http://www.djcxy.com/p/92139.html

    上一篇: Get output of a running bash script with java

    下一篇: Confusion between sleep() and wait()