我正在尝试运行.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。
答案 0 :(得分:4)
使用“cmd / c start [...]”运行批处理文件将创建一个子进程,而不是直接运行批处理文件。
因此,您将无法访问其输出。 为了使它工作,你应该使用:
String cmd = "C:\\workspace\\temp.bat";
它适用于Windows XP。
答案 1 :(得分:3)
在调用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);
}
答案 2 :(得分:-1)
BufferedReader stdInput = new BufferedReader(new
InputStreamReader( pr.getErrorStream() ));
改为使用
BufferedReader stdInput = new BufferedReader(new
InputStreamReader( pr.getInputStream ));