如何在java中获得命令提示符输出?
如何获得命令提示符的输出,这意味着我已经打开了这样一个命令提示符如何在java中获得命令提示符输出?,java,command-prompt,Java,Command Prompt,如何获得命令提示符的输出,这意味着我已经打开了这样一个命令提示符 Process process = Runtime.getRuntime().exec("cmd /c start cmd.exe /K \"C:\\Editor\\editorTemp.exe\""); 我不能像这样获得cmd输出 BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream())); S
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
cmd tty
但Windows中没有tty。实际上,您可以按照所描述的方式执行此操作,但这对于常规CMD不起作用
然而,当您从editorTemp.exe(进程D)启动自己的进程时,问题就更大了。D与过程A有更多的断开连接。这一切都是为了什么?您不直接从A启动进程D并完全控制IO流和进程本身吗?
下面是一个很好的方法。您的java线程独立于CMD调用工作。java代码在编写任何东西之前,都在击败
STDOUT
管道
如果调用Process.waitFor()
,它将等待CMD调用完成。STDOUT
应该在缓冲区中,然后您可以读取它。当您执行readLine()时,您的java线程将被阻塞,直到您有一个实际的完整行或输入流关闭为止
如果程序打印部分行(末尾没有CR或LF),然后等待输入,读线将被卡住
所以你需要逐字阅读,直到你认为程序没有更多的东西要说
见例
在主目录中写下这个
Scanner output = new Scanner(System.in);
System.out.println(“Enter your name”);
String name = output.next();
如果希望用户输入int,则需要执行此操作
int number = output.nextInt();
不确定。尝试
call
而不是start
是否有任何理由启动另一个cmd
并在其中启动程序?@Codebender是的。基本上我需要运行一个exe文件,exe应该从cmd执行。@FastSnail start?我不使用processBuilder..@FastSnail,但cmd不会提示用户。认为如果我调用一个需要用户从cmd输入的程序,那么call
选项是不可值的。AFAIK Windows cmd会将其STDIN/OUT重定向到正确的位置。OT希望看到命令输出,然后向命令输入发送一些内容以使其继续。所以你不能等到这个过程结束。即使进程仍在运行,从inputstream读取也可以正常工作。
int number = output.nextInt();