如何获得命令提示符的输出,这意味着我已经打开了这样的命令提示符。
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 Main Process 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操作方法。
您的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 number = output.nextInt();