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

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

问题描述:

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

如果我将脚本替换为“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

与C无关,尤其是考虑到它不是一个“脚本”,而是一个编译好的二进制文件。 –

+0

你为什么试图从输入流中读取?可能你需要输出流 –

+2

@IlyaBursov进程的InputStream是它的stdout。 – RealSkeptic

你这样做是从后往前。您必须读取所有过程的输出第一个然后请拨打waitFor()。你的方式,你可能会死锁,因为进程不能退出,直到它产生了所有的输出,如果你没有阅读它,它最终会阻止。

注:

  1. C不是一种脚本语言和编译的程序不会被定义为一个脚本。
  2. 取决于之前try块中代码成功的代码必须位于try块内。目前,你会在异常之后继续下去,好像它们没有发生一样。不要这样写代码。
+0

感谢您的回答和提示。起初它没有工作,但我意识到我的路径也不正确。一旦我做了两个修复它的工作,谢谢。 – Deetz