问题描述
如何获取命令提示符的输出,这意味着我已经打开了这样的命令提示符。
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);
}
那么我怎样才能得到命令提示符输出呢?
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。 实际上,您可以按照所述执行但这不适用于常规 CMD。
然而,当您从 editorTemp.exe(进程 D)启动自己的进程时,问题变得更加严重。 D 与进程 A 有更多的断开。这一切都是为了什么? 你不是简单地直接从 A 启动进程 D 并完全控制 IO 流和进程本身吗? 这是如何做到这一点的好。
2楼
您的 java 线程独立于 CMD 调用工作。
在写入任何内容之前,java 代码正在击败STDOUT
管道。
如果您调用Process.waitFor()
,它将一直等到 CMD 调用完成。
STDOUT
应该在缓冲区中,然后您可以读取它。
3楼
当您执行 readLine() 时,您的 java 线程将被阻塞,直到您有实际的完整行或输入流关闭。
如果程序打印了部分行(末尾没有 CR 或 LF),然后等待输入,则 readLine 会卡住。
因此,您需要逐个字符地阅读,直到您认为该过程无话可说。
参见例如
4楼
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();