【问题标题】:Invoking cmd.exe from java without arguments不带参数从 java 调用 cmd.exe
【发布时间】:2012-11-08 14:44:14
【问题描述】:

我正在编写一些程序来使用附加命令调用 cmd.exe 并使用 java 收集从相同生成的输出。下面是一个示例程序--

public class LoadShell {
    public static void main(String[] args) throws Exception {
    //Line1
        String [] command ={"cmd.exe","/c","dir"};      
    ProcessBuilder probuilder = new ProcessBuilder( command );             
        Process process = probuilder.start();       
        InputStream inputstream1 = process.getInputStream();        
        InputStreamReader inputstreamreader1 = new InputStreamReader(inputstream1);
        BufferedReader bufferedreader = new BufferedReader(inputstreamreader1);      
        String line="";
        while ((line = bufferedreader.readLine()) != null) {
            System.out.println(line);
        }

  }
}

这些程序按预期运行良好。现在我有一个更简单的要求。我想在没有任何参数的情况下调用 cmd.exe 并将输出收集为字符串。这是因为我想将流程对象引用和字符串发送到另一个方法以用于某些项目特定目的。所以我在 Line1 中修改了我的代码如下--

public class LoadShell {
    public static void main(String[] args) throws Exception {
          //Line1
      String [] command ={"cmd.exe"};
      ProcessBuilder probuilder = new ProcessBuilder( command );             
          Process process = probuilder.start(); 
          InputStream inputstream1 = process.getInputStream();        
          InputStreamReader inputstreamreader1 = new InputStreamReader(inputstream1);
          BufferedReader bufferedreader = new BufferedReader(inputstreamreader1);
          int intch;     
        String line="";
        while ((line = bufferedreader.readLine()) != null) {
            System.out.println(line);
        }

       }
}

但在这种情况下,readLine 方法在打印后会无限期挂起--

Microsoft Windows [版本 6.1.7601] 版权所有 (c) 2009 Microsoft Corporation。保留所有权利。

所以我也尝试使用读取BufferedReader 而不是readline 如下--

while ((intch = bufferedreader.read()) != -1) {
            int ch = (char) intch;
            System.out.println(ch);
          }

但是在读取到--对应的字节后,即使读取也是挂起的

 Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

有什么方法可以得到下面的完整输出而不导致我的程序挂起 --

Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

C:\Users\devshankhasharm>

任何想法都将不胜感激。

【问题讨论】:

  • 当您仅使用 cmd.exe 调用时,命令窗口不会打开。它仅在控制台中提供部分输出并无限期挂起。
  • 是的,你可以实际运行我的程序看看。

标签: java io java-io


【解决方案1】:

可能是因为没有/c 标志,您只是打开了一个shell 窗口,而该外部进程现在正坐在C:\> 提示符处等待发出命令。因为你从不发送任何东西,它会一直呆在那里直到你杀死它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多