我想从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
之类的命令将无效。
答案 0 :(得分:0)
根据the socat
documentation,-x
选项
不仅将传输的数据写入目标流,还将其写入stderr。
您正在阅读与本地进程标准输入相关联的process.getInputStream()
- 为了获得stderr,您应该阅读process.getErrorStream()
。