1
我嘗試從java運行wavemon命令並讀取輸出。 但我無法使Runtime.exec方法工作。ubuntu上的Runtime exec
註釋中的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容器)中。
我試了一下,我已經讀過這篇文章,但我還是不明白我在做什麼錯:■ – Quentin
可能的輸出被寫入到stderror你需要閱讀那個流? –
也嘗試沒有「sh -c」部分。我從來沒有需要過,即使我在ubuntu上執行這樣的程序。如果您使用「sh -c」,請嘗試如下所示:{「sh」,「-c」,「wavemon -i wlan1 -d」}。根據手冊頁「sh -c」從以下字符串中讀取。所以我假設它期望它是一個整體。 –