【问题标题】:Get output from BAT file using Java使用 Java 从 BAT 文件中获取输出
【发布时间】:2013-06-08 07:34:35
【问题描述】:

我正在尝试运行 .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。

【问题讨论】:

  • 阅读(并实施)所有 When Runtime.exec() won't 的建议。那可能会解决问题。如果不是,它应该提供更多关于失败原因的信息。然后忽略它引用exec 并使用ProcessBuilder 构建Process。还要将String arg 拆分为String[] args 以说明本身包含空格的参数。

标签: java networking windows-7 process runtime.exec


【解决方案1】:

在调用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);
}

【讨论】:

  • 伙计,我试过这不起作用我得到的是空值而不是命令结果
  • 在 ProcessBuilder 中没有 .redirectInput();方法有什么建议吗?我使用 NetBeans 顺便说一句
【解决方案2】:

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

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

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

它可以在 Windows XP 下运行。

【讨论】:

  • 这解决了我还有另一个问题,bat 文件包含 start run.bat 命令,我也需要其他结果:(
  • 您可以使用 CALL 在主脚本中运行其他批处理文件。参考linklink
【解决方案3】:
BufferedReader stdInput = new BufferedReader(new 
 InputStreamReader( pr.getErrorStream() ));

改为使用

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

【讨论】:

  • 不要忽略错误流。对于健壮的代码,两者都必须使用。
  • 两个while循环需要单独
  • 这实际上并不能回答问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多