在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