首页 > 解决方案 > Java 执行外部程序并捕获输出

问题描述

所以我尝试Execute使用外部程序并捕获output. 目前执行命令的部分工作正常(使用.bat文件),我可以在cmd窗口上看到输出。

不需要读取输出的部分,它似乎堆叠在我的内部while

这是我尝试过的:

String[] command = {"cmd.exe", "/C", "Start", "d:\\batFile.bat"};
        Process process =  Runtime.getRuntime().exec(command);
        InputStream is = process.getInputStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(is));

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

更新

这是我的.bat文件:

docker volume create --name=mydb
timeout 3
docker run -d -p 27017:27017 -v mydb:/data/db mongo
timeout 3

标签: javacommand-line

解决方案


也许您可以尝试像这样重定向输出:

Process runtimeProcess1;
ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/C","Start","d:\\batFile.bat");

pb.redirectOutput(Redirect.INHERIT);
pb.redirectError(Redirect.INHERIT);
pb.redirectInput(Redirect.INHERIT);

runtimeProcess1 = pb.start();

int processComplete1 = runtimeProcess1.waitFor();

推荐阅读