【问题标题】:How to get command prompt output in java?如何在java中获取命令提示符输出?
【发布时间】:2015-07-26 09:15:08
【问题描述】:

如何获取命令提示符的输出,这意味着我已经打开了这样的命令提示符。

Process process = Runtime.getRuntime().exec("cmd /c start cmd.exe /K \"C:\\Editor\\editorTemp.exe\"");

我无法得到这样的 cmd 输出

BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));

        String line = null;
        while ((line = br.readLine()) != null) {
            System.out.println(line);
        }

那么我怎样才能得到命令提示符的输出呢?

【问题讨论】:

  • 不确定。尝试call 而不是start
  • 是否有任何理由启动另一个cmd 并在其中启动您的程序?
  • @Codebender 是的。基本上我需要运行一个 exe 文件,exe 应该从 cmd 执行。
  • @FastSnail 开始?我不使用 processBuilder ..
  • @FastSnail 它的作品,但 cmd 不提示用户。认为如果我调用一个需要用户从 cmd 输入的程序,那么 call 选项就不值了。

标签: java command-prompt


【解决方案1】:

这不是 Java 问题。基本上你所做的是运行 Java(Java 主进程 A)并从它开始另一个进程(Windows CMD B)。这很好,您可以在 Java(A) 中获取此进程 (B) 的输入/输出流。 然而,这个进程 (B) 使用自己的标准输入/输出启动另一个进程(同样是 Windows CMD C)。这个进程与进程 A&B 没有任何共同之处,它使用 Windows 的标准输入/输出流。所以,A和C之间没有联系。 我不确定,但我认为有一些方法可以使用不同或非标准 IO 运行 Windows CMD。也许这样的事情会起作用:

cmd <tty >tty

但 Windows 中没有 tty。务实地,您可以按照here - Creating a Child Process with Redirected Input and Output 的描述执行此操作,但这不适用于常规 CMD。

然而,当您从 editorTemp.exe(进程 D)启动自己的进程时,问题变得更加严重。 D 与进程 A 的脱节更加严重。而这一切都是为了什么?您不是直接从 A 启动进程 D 并完全控制 IO 流和进程本身吗? 这是很好的example 怎么做。

【讨论】:

  • AFAIK Windows CMD 重定向其 STDIN/OUT 就好了
【解决方案2】:

您的 java 线程独立于 CMD 调用工作。在编写任何内容之前,Java 代码正在击败STDOUT 管道。

如果你调用Process.waitFor(),它会等到CMD调用完成。 STDOUT 应该在缓冲区中,然后你就可以读取它了。

【讨论】:

  • OT 想查看命令输出,然后向命令输入发送一些内容,使其继续。所以你不能等到这个过程完成。即使进程仍在运行,从输入流中读取也可以正常工作。
【解决方案3】:

当您执行 readLine() 时,您的 java 线程被阻塞,直到您有一个实际的完整行或输入流被关闭。

如果程序打印了部分行(最后没有CR或LF),然后等待输入,readLine就会卡住。

所以你需要一个字一个字地阅读,直到你认为过程没有更多的东西要说。

参见例如Is it possible to read from a InputStream with a timeout?

【讨论】:

    【解决方案4】:
    import java.util.Scanner;
    

    在main里面写这个。

    Scanner output = new Scanner(System.in);
    
    System.out.println(“Enter your name”);
    String name = output.next();
    

    如果您希望用户输入一个 int,那么您需要这样做。

    int number = output.nextInt();
    

    【讨论】:

      猜你喜欢
      • 2014-01-06
      • 1970-01-01
      • 2017-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多