我尝试从java运行wavemon命令并读取输出。
但是我不能让runtime.exec方法工作。
comments中的echo命令可以工作并打印“hello”,但是wavemon命令只返回“”。wavemon已经安装,我甚至尝试过用它的完整路径(/usr/bin/wavemon)作为参数。
什么都不管用。

// call wavemon
Runtime rt = Runtime.getRuntime();
String[] cmd = { "sh", "-c", "wavemon", "-i wlan1", "-d" };
//String[] cmd = { "sh", "-c","echo hello" };
Process proc = rt.exec(cmd);
proc.waitFor();

// read wavemon output into string
Scanner is =  new Scanner(new InputStreamReader(proc.getInputStream()));

StringBuffer buffer = new StringBuffer();
while (is.hasNext()) {
    buffer.append(is.nextLine());

}

proc.destroy();
System.out.println(buffer.toString());

wavemon命令的输出以空行开头,但是由于我使用了扫描仪,这应该不重要了吧?
$ wavemon -i wlan1 -d

Configured device: wlan1 (IEEE 802.11abgn)
Security: WPA, WPA2, TKIP, CCMP
...

稍微详细一点,这段代码在spring框架(spring boot,tomcat容器)中使用。

最佳答案

你不应该需要“sh-c”。试着只用:

String[] cmd = { "wavemon", "-i","wlan1", "-d" };

另外,您应该在从扫描仪读取行之后放置waitFor(),因为这将保持线程,直到处理完成。但是,在您读取它的输出之前,该过程可能不会完成。你甚至可以得到更多的幻想和阅读所有的流在不同的线程。
这篇文章有关于它的所有细节http://www.javaworld.com/article/2071275/core-java/when-runtime-exec---won-t.html

关于java - Ubuntu上的运行时exec,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21311439/

10-15 00:18