【发布时间】:2014-06-16 14:10:21
【问题描述】:
这似乎是一个初学者的问题,但我为我的树莓派写了一些代码,并想用 java 执行终端命令。到目前为止,一切都很好。我终于弄明白了,让它工作了。但我也希望我的 java 函数为函数本身提供参数。但我不知道如何告诉java如何在字符串中使用变量。所以这是我的代码:
public static void rcswitch(int code,int unitcode, int onoff) throws InterruptedException, IOException {
String command = "/bin/bash -c 'sudo /home/pi/rcswitch-pi/send code unitcode onoff'";
Process proc = Runtime.getRuntime().exec(command);
BufferedReader reader =
new BufferedReader(new InputStreamReader(proc.getInputStream()));
String line = "";
while((line = reader.readLine()) != null) {
System.out.print(line + "\n");
}
proc.waitFor();
}
它可能不是最好的选择,但它对我有用。我目前正在为 bash shell 提供以下“发送”命令,但现在我也想使用给定的参数。不管我怎么写它似乎都不起作用:(代码 unitcode 和 onoff 变量应该在发送之后添加,每个变量之前都有一个空格。
感谢您的回答:)
【问题讨论】:
-
您可以更好地控制流程,并能够使用 ProcessBuilder 对象执行多个命令。例如。一些进程会将重要信息写入 STDErr,您可以使用进程构建器将其重定向到 STDOut。
-
好吧,我试着用 ProcessBuilder 对象来做,但我怎样才能得到输出呢?通常,当我尝试它时,它会显示类似于在终端中收到的命令。
-
您调用 Processbuilder.start() 返回 Process 对象。从那里它和你已经在做的一样。只是现在,使用 ProcessBuilder,您可以设置诸如重定向、进程的工作目录以及它需要的任何参数等内容。
-
另一个问题。当我执行我创建的 .jar 文件时,RPi 似乎没有给出输出。不在控制台中,也不在文件中。我不知道为什么。似乎命令没有正确发送到终端。
-
我需要查看代码。可能最适合作为 SO 上的另一个问题。
标签: java shell terminal raspberry-pi