gpt4 book ai didi

java - 如何从 Java 的 BufferedReader 读取 C 脚本中的行?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:38:47 25 4
gpt4 key购买 nike

我在树莓派上运行这个 java 程序。该程序应该运行脚本“hello_pixy”并扫描它打印出来的内容。当我手动运行 hello_pixy 时,它会正常打印行(通过 C 的 printf 行)。但是当我运行该程序时,什么也没有打印出来,BufferedReader 也没有读取任何行。

如果我将脚本替换为“ls”之类的内容,则 BufferedReader 会读取它并将其打印出来。有没有一种方法可以更改 C 中的“printf”以发送到 InputStream(我不太了解 C,仅凭 Java 经验)?

    Process process = null;

try {
process = Runtime.getRuntime().exec("sudo .ss/pixy/build/hello_pixy/hello_pixy");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} //for Windows

try {
process.waitFor();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;

String print = "";
try {
while ((line = reader.readLine()) != null) {
print += line;
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

System.out.println("\nCodescan:\n\n" + print);

我正在执行的代码在这里:https://github.com/De-etz/pixy/blob/master/src/host/hello_pixy/hello_pixy.cpp

最佳答案

您正在从头到尾执行此操作。您必须读取所有进程的输出,然后然后调用waitFor()。按照您的方式,您可能会死锁,因为该进程在生成所有输出之前无法退出,如果您不阅读它,它最终会阻塞。

注意事项:

  1. C 不是脚本语言,编译后的程序根据定义也不是脚本。
  2. 依赖于先前try block 中代码成功的代码必须在该try block 内。目前,您正在继续处理异常,就好像它们没有发生一样。不要这样写代码。

关于java - 如何从 Java 的 BufferedReader 读取 C 脚本中的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45286178/

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