如何从java程序运行Linux终端cmd



我正试图从一个java类调用我的rrdtool cmd,不知道如何进行。

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

rrdtool update mydb.rrd 1385056701:6:5

如何从java类执行此cmd?

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

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

请从Java运行unix命令,并且无法在Java Stackoverflow 中运行unix命令

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

尝试这个

        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());
    }
}

也可以在这里查看更多详细信息

这样尝试(正如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.exc

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

这是一种方便的方法。表单exec(命令)的调用行为方式与调用exec完全相同(command,null)。

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

您必须注意的是,Java进程对于输入流和输出流的缓冲区非常少,一旦这些缓冲区满了,就会阻塞进程。这是悄无声息地发生的。中兴高管可以帮你。

您可以查看:https://github.com/OpenNMS/opennms/blob/master/opennms-rrd/opennms-rrd-rrdtool/opennms-rrdtool-api/src/main/java/org/opennms/netmgt/rrd/rrdtool/JniRrdStrategy.java

在java中实际使用rrdtool。或者在https://code.google.com/p/rrd4j/

用于java中rrdtool的本机版本。

我在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命令。如果你需要更多的帮助,我很乐意帮助你。

最新更新