如何从 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()
。按照您的方式,您可能会死锁,因为该进程在产生所有输出之前无法退出,如果您不阅读它,它最终会阻塞。
备注:
- C 不是脚本语言,编译后的程序根据定义也不是脚本。
- 依赖于先前
try
块中代码成功的代码必须在该 try
块内。目前,您正在继续处理异常,就好像它们没有发生一样。不要这样写代码。
我运行在 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()
。按照您的方式,您可能会死锁,因为该进程在产生所有输出之前无法退出,如果您不阅读它,它最终会阻塞。
备注:
- C 不是脚本语言,编译后的程序根据定义也不是脚本。
- 依赖于先前
try
块中代码成功的代码必须在该try
块内。目前,您正在继续处理异常,就好像它们没有发生一样。不要这样写代码。