2013-11-21 121 views
0

我想从java类调用我的rrdtool cmd,不知道如何去做。我如何从一个Java程序运行Linux终端cmd

我已经从我的终端测试了我的RRDTool cmd,它已成功,请参阅下文。

rrdtool update mydb.rrd 1385056701:6:5 

如何从java类执行此cmd?

+1

请参阅:[如何运行linux命令在java代码](http://stackoverflow.com/questions/3403226/how-to-run-linux-commands-in-java-code ) – abronan

回答

1

试试这个

 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

0

您可以使用运行#EXEC用于这一目的。如果您希望对已启动的进程进行类似于Java的控制,则会有一个名为zt-exec的优秀库,使处理进程变得更加简单。 ProcessBuilder还提供了与Java标准库附带的Runtime#exec相比较小的API改进。

需要注意的一点是,Java进程只需很少的缓冲区即可处理输入和输出流,一旦这些缓冲区运行完成,就会阻塞进程。这种情况默默地发生。 zt-exec可以帮助你。

0

尝试像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(命令,null, null)的行为完全相同。

0

我在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 

我希望这是有益的ü:)我在Java中其他一些rrdtool的指令工作。如果您需要更多帮助,我会很乐意提供帮助。