【问题标题】:Executing terminal command with java using variables使用变量用java执行终端命令
【发布时间】: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


【解决方案1】:

您可以使用 String.format() 来构造如下命令:

String command = String.format("/bin/bash -c 'sudo /home/pi/rcswitch-pi/send %d %d %d'", code, unitcode, onoff);

希望这是您正在寻找的。​​p>

【讨论】:

    猜你喜欢
    • 2015-01-27
    • 2014-12-15
    • 2012-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多