【问题标题】:Get constant feedback from bash process, java [closed]从 bash 进程获取持续反馈,java [关闭]
【发布时间】:2013-07-30 23:41:52
【问题描述】:

要在 bash 中从 java 中执行进程/命令,可以使用以下类:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Arrays;

public class CmdExecutor {
    public CmdExecutor(){

    }
    public void exe(String [] args) throws IOException{
            if (args.length <= 0) {
                System.out.println("empty command");
                return;
            }

           Process process = new ProcessBuilder(args).start();
           InputStream is = process.getInputStream();
           InputStreamReader isr = new InputStreamReader(is);
           BufferedReader br = new BufferedReader(isr);

           String line;
           System.out.printf("Output of running %s is:", 
              Arrays.toString(args));

           while ((line = br.readLine()) != null) {
             System.out.println(line);
           }
    }
}

但是。如果进程没有终止(还)怎么办。它进行计算并将其输出到外壳中。我希望能够在另一个线程中运行该进程并获取输出中的更改,例如逐帧字符串。如何做到这一点?

【问题讨论】:

    标签: java linux bash


    【解决方案1】:

    退房 http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/LinkedBlockingQueue.html

    您可能希望让一个线程(生产者)读取进程输出,并将它们放入 LinkedBlockingQueue(queue.put),然后让另一个线程(消费者)从队列中获取元素(queue.poll)并处理它.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多