在Linux下編寫一些用於運行文本可執行文件的Java代碼,我有一個問題需要打印出它的輸出。這個可執行文件實際上是一個nmap -sP,因此接收參數。如何讀取Java中exec進程的輸出?
每次我要求編譯的類,我只能看到第一個輸出行,但沒有別的。
這是runFile.java文件:
import java.lang.Runtime;
import java.lang.Process;
import java.io.*;
import java.lang.InterruptedException;
public class runFile {
public static void main (String args[]) throws IOException, InterruptedException {
Runtime r = Runtime.getRuntime();
Process p = r.exec("/home/diegoaguilar/Dropbox/Buap/SO/file.exe "+args[0]+args[1]);
InputStream stream = p.getInputStream();
BufferedReader reader = new BufferedReader (new InputStreamReader(stream));
String salida = reader.readLine();
while (salida != null) {
System.out.println(salida);
salida = reader.readLine();
}
//p.waitFor();
}
}
所以,這是的file.exe的內容:
nmap -sP $segment1-$segment1
無論我所說的論點,無論是合法還是不RUNFILE與,它總是打印在控制檯上,類似於第一行:
Starting Nmap 5.2 1(http://nmap.org)在2013年8月25日02:09 CDT
您需要閱讀過程的InoutStream(這是來自過程的輸出),[例如](http://stackoverflow.com/questions/16093754/how-do-i-execute-a-序列相關控制檯命令/ 16094810#16094810)和[例子](http://stackoverflow.com/questions/11893469/java-execute-a-program-with-options-like-ls-l/11893495 #11893495)。一個將流程的輸出直接輸出到標準輸出,另一個使用一個線程讀取InputStream,以便不阻塞當前線程 – MadProgrammer