【问题标题】:How do i run a Linux terminal cmd from a java program [duplicate]我如何从 Java 程序运行 Linux 终端 cmd [重复]
【发布时间】:2013-12-26 19:50:21
【问题描述】:

我正在尝试从 java 类中调用我的 rrdtool cmd,但不知道该怎么做。

我已经从我的终端测试了我的 RRDTool cmd,它是成功的,见下文。

rrdtool update mydb.rrd 1385056701:6:5

如何从 java 类执行这个 cmd?

【问题讨论】:

标签: java cmd rrd


【解决方案1】:

您可以使用以下命令格式来运行您的 Linux 命令。

Runtime r = Runtime.getRuntime();
Process p = r.exec(yourcmd);

请通过Running unix command from JavaUnable to run Unix command in Java-Stackoverflow

希望您能在这里得到答案。

【讨论】:

    【解决方案2】:

    试试这个

            public class ShellTest {
        public static void main(String[] args) throws java.io.IOException, java.lang.InterruptedException {
            // Get runtime
            java.lang.Runtime rt = java.lang.Runtime.getRuntime();
            // Start a new process: UNIX command ls
            java.lang.Process p = rt.exec("ls");
            // Show exit code of process
            System.out.println("Process exited with code = " + rt.exitValue());
        }
    }
    

    also check here for more details

    【讨论】:

      【解决方案3】:

      试试this(由paxdiablo回答):

      public static void main(String args[]) {
              String s;
              Process p;
              try {
                  p = Runtime.getRuntime().exec("ls -aF");
                  BufferedReader br = new BufferedReader(
                      new InputStreamReader(p.getInputStream()));
                  while ((s = br.readLine()) != null)
                      System.out.println("line: " + s);
                  p.waitFor();
                  System.out.println ("exit: " + p.exitValue());
                  p.destroy();
              } catch (Exception e) {}
          }
      

      详情请查看java.lang.Runtime.exec

      在单独的进程中执行指定的字符串命令。

      这是一种方便的方法。调用 exec(command) 形式 行为方式与调用 exec(command, null, 空)。

      【讨论】:

        【解决方案4】:

        您可以为此目的使用 Runtime#exec。如果你想对启动的进程进行类似 Java 的控制,有一个很棒的库 zt-exec 可以让处理进程变得更加容易。与 Java 标准库附带的 Runtime#exec 相比,ProcessBuilder 还提供了一个小的 API 改进。

        您必须注意的是,Java 进程为输入和输出流提供的缓冲区非常少,一旦这些缓冲区满了就会阻塞进程。这无声无息地发生。 zt-exec 可以帮助您。

        【讨论】:

          【解决方案5】:
          【解决方案6】:

          我在java程序中运行了我的rrdtool命令如下:

              Process p = null;
              try {
          
                  ProcessBuilder pb = new ProcessBuilder("/usr/bin/rrdtool","lastupdate", rrdPath);
          
                  pb.redirectErrorStream(true);
                  p = pb.start();
                  int exitVal = p.waitFor();
                  if (exitVal == 0)
                      System.out.println("exitVal of rrdLastUpdate is Successful");
                  else
                      System.out.println("exitVal of rrdLastUpdate is Abnormal");
          
              } catch (Exception e) {
                  System.out.println("Problem in executing rrdlastupdate()");
                  e.printStackTrace();
          
              }//end of try-catch
          

          我希望这对 U 有用:) 我在 java 中使用了其他一些 rrdtool 命令。如果您需要更多帮助,我很乐意提供帮助。

          【讨论】:

            猜你喜欢
            • 2021-10-21
            • 2015-05-25
            • 2011-11-27
            • 1970-01-01
            • 2020-07-01
            • 1970-01-01
            • 2014-02-02
            • 2013-02-27
            相关资源
            最近更新 更多