【发布时间】:2014-01-27 22:36:25
【问题描述】:
我用于在 Linux Debian 中运行终端命令并在 java 程序中获取输出的代码是这样的:
public static String execute(String command) {
StringBuilder sb = new StringBuilder();
String[] commands = new String[]{"/bin/sh", "-c", command};
try {
Process proc = new ProcessBuilder(commands).start();
BufferedReader stdInput = new BufferedReader(new
InputStreamReader(proc.getInputStream()));
BufferedReader stdError = new BufferedReader(new
InputStreamReader(proc.getErrorStream()));
String s = null;
while ((s = stdInput.readLine()) != null) {
sb.append(s);
sb.append("\n");
}
while ((s = stdError.readLine()) != null) {
sb.append(s);
sb.append("\n");
}
} catch (IOException e) {
return e.getMessage();
}
return sb.toString();
}
现在的问题是,它适用于像ls / 这样的普通命令,并返回适当的结果。但我的目标是运行如下命令:
echo 23 > /sys/class/gpio/export
例如,用于激活 CubieBoard 平台中的 gpio 引脚。 (Cubieboard 是类似于 Raspberry Pi 的迷你 PC 板)。
现在在系统本身的终端中运行此命令,可以正常工作并给我正确的结果。但是当我从这个java代码运行它时,我无法得到任何结果。
关键是,它可以工作并且命令执行得很好,但是我无法获得命令的输出消息!
例如,如果 pin 在过去是活动的,那么通常它应该给我返回如下结果:
bash: echo: write error: Device or resource busy
但是当我通过上面的 java 代码运行这个命令时,我没有得到任何响应。 (再次生效但只是我无法得到终端的响应!)
当我运行代码时,代码中的stdInput 和stdError 变量都具有null 的值。 :(
请帮助我完成我的项目。这是唯一剩下的部分:(
谢谢。
【问题讨论】: