【问题标题】:How to read output from command.com in java如何在java中读取command.com的输出
【发布时间】:2016-10-31 07:42:22
【问题描述】:

我正在尝试从 command.com not cmd.exe 读取输出,因此我尝试使用以下代码:

    Process p=Runtime.getRuntime().exec("command /c echo goodbye world"); //command.com doesn't work eiher
    p.waitFor(); 
    BufferedReader reader=new BufferedReader(
        new InputStreamReader(p.getInputStream())
        ); 
    String line=""; 
    String output="";
    while((line = reader.readLine()) != null) 
        { 
        output+=line;
        }
    System.out.print(line);

不幸的是,它不打印任何东西,但是当我用 cmd 完美替换命令时它可以工作。 我试过 ro 在 cmd 中运行 'command /c echo goodbye world' ,它可以工作。 我已经在 windows me 和 XP 中尝试过这段代码,因为 command.com 在新的 windows 版本中不存在。

【问题讨论】:

    标签: java process output


    【解决方案1】:

    您可以尝试修改命令命令以将其输出发送到文件,然后在 p.waitFor() 完成后,您可以从该文件中读取输入。

    Process p=Runtime.getRuntime().exec("command /C echo goodbye world > output.txt");

    这是一个猜测,但也许 command.com 解释器在 /C 开关上区分大小写。也许用 upper-C 试试,看看会发生什么。您也可以使用 ProcessBuilder 而不是 Process,因为它可以让您将命令的标准错误重定向到标准输出,以便您可以从输入流中收集它们。

    【讨论】:

    • 感谢您的回答,但正如我所说,我使用的是 command.com 而不是 cmd.exe,我尝试使用此代码重定向 command.com 的输出,但没有成功。
    • 修改了命令的 exec 而不是 cmd。将 /c 更改为 /C。还有一个可能的问题是您正在尝试读取命令程序的输入流,该命令程序只会捕获键盘或文件重定向输入等内容。如果你想获取 command.com 打印出来的不是来自键盘的内容,我想你想获取进程输出流的句柄。
    • 请忽略前面关于输入流与输出流的信息。在阅读了有关流程的 javadoc 后,我将它们倒退了。更新了我的答案,建议改用大写 C(可能区分大小写)。
    • 对不起,这不是关于大写的,尝试过但没有用 - 正如我所预料的那样 - 因为 - 正如我所说 - 当我尝试它时它工作得很好 'command /c echo再见世界'在 cmd 而不是 java
    【解决方案2】:

    尝试同时捕获error output 和exit code - 如果您在标准输出中没有看到任何内容,则可能是错误流中存在错误消息。如果它也是空的,退出代码可能会提供一些额外的调试细节。您可以咨询Windows exit code table 来尝试确定退出的原因。

    我的猜测是,由于某种原因,JVM 不能像调用 cmd 那样调用 command(并且错误流包含一条消息)。也许command 不在JVM 的PATH 上,或者实际上不能从系统的shell 调用。您还可以尝试指定 command.com 可执行文件的完整路径。


    顺便说一句,在编写字符串时,您应该始终使用可变的StringBuilder;它使用更少的内存。最好让library do the work for you。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-09
      • 1970-01-01
      • 2011-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-30
      • 1970-01-01
      相关资源
      最近更新 更多