【问题标题】:Getting command prompt output instantly?立即获得命令提示符输出?
【发布时间】:2013-04-07 17:38:30
【问题描述】:

可能是一个误导性的标题,但感谢其他问题的人,我的程序有些工作,但现在不知道该怎么做。

这是我运行命令提示符命令并返回输出的方法

public static String cmdExec(String cmdLine) {
    String line;
    String output = "";
    try {
        Process p = Runtime.getRuntime().exec(cmdLine);
        BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
        while ((line = input.readLine()) != null) {
            output += (line + '\n');
        }            
        input.close();           
        }
    catch (Exception ex) {
        ex.printStackTrace();
    }

    return output;
}

它按照我想要的方式工作,但现在当我运行这个方法时,它会等到一切都完成,然后返回输出,这不是我想要的。

我做了一个使用 cmdExec 方法的 ping 泛洪方法。这是我如何调用 cmdExec()

String[] input = ipTextField.getText().split(":");

    if(input.length == 2) {
        System.out.println(cmdExec("cmd /c ping " + input[0] + " -t -n " + Integer.parseInt(input[1])));

例如,如果我在我的程序中输入“127.0.0.1:3”,它将向 localhost 发送 3 个数据包。现在的问题是,不是将我从命令提示符 1 逐个打印出来的行作为输出,而是等到所有 3 个数据包都发送完毕,然后打印输出的完整输出。

如果我在命令提示符下键入“ping 127.0.0.1 -t -n 3”,它将逐个打印回复,而不是一次打印,那么我将如何在我的程序中做同样的事情呢?

【问题讨论】:

    标签: java cmd command-prompt output


    【解决方案1】:

    代替

    while ((line = input.readLine()) != null) {
                output += (line + '\n');
            } 
    

    要立即将结果输出到命令行,只需在 while 循环中打印

         while ((line = input.readLine()) != null) {
             System.out.println(line);               
             output += (line + '\n');
          } 
    

    【讨论】:

    • 如果他想对数据做其他事情怎么办?写入通用流是更好的解决方案。之后,他可以将其指向任何他想要的东西:插座、控制台等。
    • 谢谢!这正是我想要的!
    • 你的意思是我的回答还是Sertpu Mihai的回答?
    • 您的,尽管正如 Sterpu Mihai 所说,我实际上要对数据做一些事情,但现在已经足够了。
    【解决方案2】:

    您可以通过以下方式连续打印:

    while ((line = input.readLine()) != null) {
        System.out.println(line);
        output += (line + '\n');
    }   
    

    (以下内容对未来的观众仍然有用,但不是该问题的适用答案。) 在从输出流中读取之前插入一个process.waitFor()。此命令会等到进程终止后再继续。然后,您也不必逐行阅读。您可以一次简单地转储缓冲区。

    要么这样,要么你可以找到一个只出现在最后一行的字符串(例如 Windows 中的 Minimum)并将 while 条件更改为:

    while((line == input.readline()).indexOf("Minimum") == -1)
    

    【讨论】:

    • 我认为这与我想要的完全相反。对不起,我的英语不是很好。就像我说的; “如果我在命令提示符下键入“ping 127.0.0.1 -t -n 3”,它将逐个打印回复,而不是一次全部打印,那么我将如何在我的程序中做同样的事情?因此,如果我在控制台中输入它,它会每隔大约 1 秒回复一次,具体取决于速度。我的程序只是等待它完成,然后一次性打印出来。
    • 哦,对不起,我误会了。我将在几秒钟内编辑回复。
    • @Woobie 实际上,我还是有点困惑。您希望它显示输出,还是希望它保存输出以供以后使用?
    • 现在只显示它,稍后当我弄清楚有关布局的更多信息时,我将在我的程序中添加一个“控制台”,用于打印输出。Art Vandelay已经向我展示了该做什么,它有效,但我也想以某种方式在未来的控制台中显示它。
    • 确实如此,但 Art Vandelay 已经向我展示了同样的东西。无论如何,谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多