Java 执行外部程序并捕获输出

标签 java command-line

所以我尝试执行外部程序并捕获输出。 目前,执行命令的部分工作正常(使用 .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

最佳答案

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

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();

关于Java 执行外部程序并捕获输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52389986/

相关文章:

java - 无法在 Spring Boot 中获取属性

windows - findstr Windows命令正则表达式

c - 将 sprintf 中的信息保存到变量

linux - 如何使用相对密码 + 字符串创建别名

windows - 在 Windows 上创建桌面链接的脚本?

java - Spring Boot 测试——等待终止

java - 使用 DataNucleus JDO 更新 Google App Engine 中的子对象

java - 使用 libjvm.so 时出现 Sigsegv Java fatal error

java - 从整数值中提取个位和十位

linux - 从 linux 命令行将 PDF 转换为 GRAYSCALE 格式以供打印机使用