java - 通过java进程构建器运行多个命令并通过bufferreader获取其输出

标签 java cmd

我正在运行以下代码:

public static void main(String[] args) throws IOException, InterruptedException {
    ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/C", "echo hello");
    Process p = pb.start();


    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(p.getInputStream()));
    String line, l = "";
    while ((line = bufferedReader.readLine()) != null) {

        System.out.println(l);
        l = l + line;

    }

    p.destroy();
    bufferedReader.close();
    System.out.println("completed");
    ProcessBuilder pb1 = new ProcessBuilder("cmd.exe", "/C", "echo hi");
    Process p1 = pb1.start();

    line = "";
    BufferedReader bufferedReader1 = new BufferedReader(new InputStreamReader(p1.getInputStream()));

    while ((line = bufferedReader1.readLine()) != null) {

        l = l + line;
        System.out.println(l);

    }

    p1.destroy();
    bufferedReader1.close();
    System.out.println("completed");
}

但是在运行我的代码时,两个缓冲区读取器已正确提取结果。

问题是程序的执行没有终止并且被挂起。

最佳答案

为什么你不创建一个方法来接受你的命令并返回你的结果,像这样你可以执行许多命令,并且你可以在任何地方使用它您的程序,如果您需要一些更改,您只需更改此方法而不是所有程序:

你的代码应该像这样:

public static void main(String[] args) {
    String command1 = "echo hello";
    String command2 = "echo hi";
    System.out.println(executerCommand(command1));
    System.out.println(executerCommand(command2));
}

public static String executCommand(String command) {
    String line;
    String resultat = "";
    try {
        ProcessBuilder builder;

        builder = new ProcessBuilder("cmd.exe", "/c", command);

        builder.redirectErrorStream(true);
        Process p = builder.start();
        BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
        while (true) {
            line = r.readLine();
            if (line == null) {
                break;
            }
            resultat += line + "\n";
        }
    } catch (IOException e) {
        System.out.println("Exception = " + e.getMessage());
    }
    return resultat;
}

这会返回如下结果:

run:
hello

hi

BUILD SUCCESSFUL (total time: 0 seconds)

希望可以帮到你

关于java - 通过java进程构建器运行多个命令并通过bufferreader获取其输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41783720/

相关文章:

java - MySQL 重复事件

windows - 文件夹路径中的批处理通配符 (*) 到随时间变化的目标文件夹名称

Python:同时线程化标准输入和标准输出

windows - Windows 批处理文件中的三重 IF 语句?如果如果如果如果?其他错误

c++ - 将 .bat 转换为 .exe 而不依赖于 cmd.exe

java - 数组仅打印最后存储的值,数组元素删除仅替换元素

java - 使用 Jackson 序列化对象时如何覆盖类型信息?

java - 从Java Web应用程序控制C应用程序

java - idea检查batis mapper bean错误

windows - 为什么从 PowerShell 运行的 Perl 脚本可以在新控制台中运行,而 Python 脚本却不能?