我尝试从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/