gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:31:01 27 4
gpt4 key购买 nike

我想从 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 这样的命令将不起作用。

最佳答案

根据 the socat documentation , -x 选项

Writes the transferred data not only to their target streams, but also to stderr.

您正在从连接到 native 进程标准输出的 process.getInputStream() 读取 - 要获取 stderr,您应该改为读取 process.getErrorStream()

关于获取运行程序输出的Java代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27380943/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com