代码之家  ›  专栏  ›  技术社区  ›  Deetz

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

  •  1
  • Deetz  · 技术社区  · 8 年前

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

        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 回复  |  直到 8 年前
        1
  •  1
  •   user207421    8 年前

    你是在背对背地做这件事。您必须读取所有进程的输出 第一 然后 呼叫 waitFor() 。您的方式可能只是死锁,因为进程在生成所有输出之前无法退出,如果您没有读取它,它最终会阻塞。

    1. C不是一种脚本语言,根据定义,编译程序也不是脚本。
    2. 取决于先前版本中代码的成功的代码 try 尝试 块目前,您正在继续处理异常,就好像它们没有发生一样。不要这样写代码。