如何在java中获取命令提示符输出?

时间:2015-07-26 09:15:09

标签: 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()));

        String line = null;
        while ((line = br.readLine()) != null) {
            System.out.println(line);
        }

那么如何才能获得命令提示输出?

4 个答案:

答案 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();
相关问题