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

问题描述 投票:3回答:4

如何获得命令提示符的输出,这意味着我已经打开了这样的命令提示符。

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 command-prompt
4个回答
1
投票

这不是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操作方法。


0
投票

您的Java线程独立于CMD调用而工作。在编写任何代码之前,Java代码击败了STDOUT管道。

如果您呼叫Process.waitFor(),它将等待直到CMD呼叫完成。 STDOUT应该在缓冲区中,然后您可以读取它。


0
投票

当您执行readLine()时,您的Java线程将被阻塞,直到您有实际的全行或输入流关闭为止。

如果程序打印部分行(末尾没有CR或LF),然后等待输入,则readLine将被卡住。

因此,您将需要逐个字符地阅读,直到您认为过程中无话可说。

例如Is it possible to read from a InputStream with a timeout?


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();
© www.soinside.com 2019 - 2024. All rights reserved.