如何在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();