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

How to get command prompt output in java?

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

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 问题。基本上你所做的是 运行ning Java (Java Main Process A) 然后从它开始另一个进程 (Windows CMD B)。这很好,您可以在 Java(A) 中获得此过程 (B) 的 input/output 流。 然而,这个进程 (B) 启动了另一个进程(同样是 Windows CMD C),它有自己的标准 input/output。此进程与进程 A 和 B 没有任何共同之处,并使用 Windows' 标准 Input/Output 流。因此,A 和 C 之间没有任何联系。 我不确定,但我认为有一些方法可以 运行 Windows 使用不同或非标准 IO 的 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 如何做到这一点。

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

如果您调用Process.waitFor(),它将等到CMD 调用完成。 STDOUT应该在buffer里面,然后就可以读取了。

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

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

所以你需要一个字一个字的看,直到你觉得过程无话可说为止。

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

import java.util.Scanner;

里面主要写这个

Scanner output = new Scanner(System.in);

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

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

int number = output.nextInt();