Java代码获取正在运行的程序的输出

时间:2014-12-09 14:11:13

标签: java linux

我想从java程序运行以下命令:

socat -x -u /dev/ttyFTDI0,raw,echo=0,crnl /dev/ttyFTDI1,raw,echo=0,crnl

这个程序应该无限期地运行,同时输出这样的十六进制字符串:

  

b4 03 03 92 00 01 3f c6 b4 03 10 03 00 01 6a af

我目前的测试代码是:

public void testOutput() {
    try {
        List<String> command = new ArrayList<String>();
        command.add("socat");
        command.add("-x");
        command.add("-u");
        command.add("/dev/ttyFTDI0,raw,echo=0,crnl");
        command.add("/dev/ttyFTDI1,raw,echo=0,crnl");

        ProcessBuilder proBui = new ProcessBuilder(command);
        Process process = proBui.start();
        //process.waitFor();
        BufferedReader r = new BufferedReader(new InputStreamReader(process.getInputStream()));

        while (true) {
            String temp = r.readLine();
            if (temp != null && !temp.isEmpty()) {
                //do something with data
                System.out.print(temp);
            }
            Thread.sleep(1);
        }
    } catch (Exception ex) {
        System.out.println(ex);
    }
}

虽然此代码适用于在给定时间后完成的命令,但是给定的命令或watch ls之类的命令将无效。

1 个答案:

答案 0 :(得分:0)

根据the socat documentation-x选项

  

不仅将传输的数据写入目标流,还将其写入stderr。

您正在阅读与本地进程标准输入相关联的process.getInputStream() - 为了获得stderr,您应该阅读process.getErrorStream()