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

How to read lines from a C script from Java's BufferedReader?

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

如果我将脚本替换为 "ls" 之类的内容,则 BufferedReader 会读取它并将其打印出来。有没有办法可以更改 C 中的 "printf"s 以发送到 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 块中代码成功的代码必须在该 try 块内。目前,您正在继续处理异常,就好像它们没有发生一样。不要这样写代码。