0

在 Linux 下编写一些用于运行文本可执行文件的 Java 代码,我在打印输出时遇到了问题。这个可执行文件实际上是一个nmap -sP并因此接收参数。

每次调用已编译的类时,我只能看到第一条输出行,而没有其他内容。

这是 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 ,无论是否有效,它总是会打印到控制台,类似于第一行:

在 2013-08-25 02:09 CDT开始 Nmap 5.21 ( http://nmap.org )

4

3 回答 3

1

如何将输出发送到临时文件然后读取该文件。

进程 p = r.exec("/home/diegoaguilar/Dropbox/Buap/SO/file.exe "+args[0]+args[1]+" > temp.output");

现在输出将转到 temp.output 文件,您应该能够轻松阅读它。

于 2013-08-25T07:32:00.510 回答
1

在单独的线程中读取输入流和错误流。另外,等待线程加入。这将读取所有消息,直到执行命令。

LogStreamReader 是我读取流的自定义线程。

Runtime r = Runtime.getRuntime();
Process p = r.exec(cmd);

LogStreamReader lsr = new LogStreamReader(p.getInputStream(), "INPUT");
Thread thread = new Thread(lsr);
thread.start();
LogStreamReader lsr2 = new LogStreamReader(p.getErrorStream(), "ERROR");
Thread thread2 = new Thread(lsr2);
thread2.start();
thread2.join();
thread.join();
于 2013-08-25T07:37:26.567 回答
0

尝试放在p.waitFor();后面Process p = r.exec("/home/diegoaguilar/Dropbox/Buap/SO/file.exe "+args[0]+args[1]);

于 2013-08-25T07:31:37.900 回答