【发布时间】:2013-12-26 19:50:21
【问题描述】:
我正在尝试从 java 类中调用我的 rrdtool cmd,但不知道该怎么做。
我已经从我的终端测试了我的 RRDTool cmd,它是成功的,见下文。
rrdtool update mydb.rrd 1385056701:6:5
如何从 java 类执行这个 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);
请通过Running unix command from Java和Unable to run Unix command in Java-Stackoverflow
希望您能在这里得到答案。
【讨论】:
试试这个
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());
}
}
【讨论】:
试试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, 空)。
【讨论】:
您可以为此目的使用 Runtime#exec。如果你想对启动的进程进行类似 Java 的控制,有一个很棒的库 zt-exec 可以让处理进程变得更加容易。与 Java 标准库附带的 Runtime#exec 相比,ProcessBuilder 还提供了一个小的 API 改进。
您必须注意的是,Java 进程为输入和输出流提供的缓冲区非常少,一旦这些缓冲区满了就会阻塞进程。这无声无息地发生。 zt-exec 可以帮助您。
【讨论】:
在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 命令。如果您需要更多帮助,我很乐意提供帮助。
【讨论】: