如何获取命令提示符的输出,这意味着我已经打开了这样的命令提示符。
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);
}
那么如何才能获得命令提示输出?
答案 0 :(得分: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如何做到这一点。
答案 1 :(得分:0)
您的java线程独立于CMD调用。在编写任何内容之前,java代码正在击败STDOUT
管道。
如果您致电Process.waitFor()
,它将等待CMD通话完成。 STDOUT
应该在缓冲区中,然后你可以阅读它。
答案 2 :(得分:0)
当你执行readLine()时,你的java线程会被阻塞,直到你有一个实际的实线或输入流被关闭。
如果程序打印出部分行(最后没有CR或LF),然后等待输入,则readLine将被卡住。
所以你需要逐个阅读,直到你认为这个过程没有更多的话要说。
参见例如Is it possible to read from a InputStream with a timeout?
答案 3 :(得分:0)
import java.util.Scanner;
在主体内部写下这个。
Scanner output = new Scanner(System.in);
System.out.println(“Enter your name”);
String name = output.next();
如果您希望用户输入一个整数,则需要这样做。
int number = output.nextInt();