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

时间:2017-07-24 17:01:09

标签: java linux bufferedreader

我在覆盆子pi上运行这个java程序。该程序应该运行脚本" hello_pixy"并扫描它打印出来的内容。当我手动运行hello_pixy时,它会正常打印出行(通过C&#39的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

1 个答案:

答案 0 :(得分:1)

你正在做这件事。您必须先读取所有进程的输出 ,然后然后调用waitFor()。你的方式可能只是死锁,因为在它产生所有输出之前进程无法退出,如果你没有读它,它最终会阻塞。

注意:

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