6

我正在尝试运行 .bat 文件并获取输出。我可以运行它,但我无法在 Java 中得到结果:

String cmd = "cmd /c start C:\\workspace\\temp.bat";

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

BufferedReader stdInput = new BufferedReader(
    new InputStreamReader( pr.getInputStream() ));

String s ;
while ((s = stdInput.readLine()) != null) {
    System.out.println(s);
}

结果是null。不知道为什么我会得到这个。请注意,我使用的是 Windows 7。

4

3 回答 3

5

使用“cmd /c start [...]”运行批处理文件将创建一个子进程,而不是直接运行批处理文件。

因此,您将无法访问其输出。为了使它工作,你应该使用:

String cmd = "C:\\workspace\\temp.bat";

它可以在 Windows XP 下运行。

于 2013-06-12T09:21:08.583 回答
4

在调用process.waitFor().

执行以下操作:

String line;
Process p = Runtime.getRuntime().exec(...);
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
while ((line = input.readLine()) != null) {
    System.out.println(line);
}
input.close();

更好的方法是使用ProcessBuilder该类,并尝试编写如下内容:

ProcessBuilder builder = new ProcessBuilder("/bin/bash");
builder.redirectInput();
Process process = builder.start();

while ((line = reader.readLine ()) != null) {
    System.out.println ("Stdout: " + line);
}
于 2013-06-12T08:49:46.550 回答
-1
BufferedReader stdInput = new BufferedReader(new 
 InputStreamReader( pr.getErrorStream() ));

改为使用

BufferedReader stdInput = new BufferedReader(new 
 InputStreamReader( pr.getInputStream ));
于 2013-06-12T08:56:13.580 回答