我在覆盆子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
答案 0 :(得分:1)
你正在做这件事。您必须先读取所有进程的输出 ,然后然后调用waitFor()
。你的方式可能只是死锁,因为在它产生所有输出之前进程无法退出,如果你没有读它,它最终会阻塞。
注意:
try
块中代码成功的代码必须位于try
块内。目前,您在异常后仍在继续,好像它们没有发生。不要写这样的代码。