当前位置: 代码迷 >> java >> 如何在java中获取命令提示符输出?
  详细解决方案

如何在java中获取命令提示符输出?

热度:100   发布时间:2023-07-16 17:42:26.0

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

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);
        }

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

这不是 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。 实际上,您可以按照所述执行但这不适用于常规 CMD。

然而,当您从 editorTemp.exe(进程 D)启动自己的进程时,问题变得更加严重。 D 与进程 A 有更多的断开。这一切都是为了什么? 你不是简单地直接从 A 启动进程 D 并完全控制 IO 流和进程本身吗? 这是如何做到这一点的好。

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

如果您调用Process.waitFor() ,它将一直等到 CMD 调用完成。 STDOUT应该在缓冲区中,然后您可以读取它。

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

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

因此,您需要逐个字符地阅读,直到您认为该过程无话可说。

参见例如

import java.util.Scanner;

里面主要写这个。

Scanner output = new Scanner(System.in);

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

如果您希望用户输入 int,则需要执行此操作。

int number = output.nextInt();
  相关解决方案