java - 在 Java 中重定向子进程的 I/O(为什么 ProcessBuilder.inheritIO() 不起作用?)

标签 java process io

我正在通过以下方式启动流程。

try {
    final Process mvnProcess = new ProcessBuilder("cmd", "/c", "mvn", "--version")
            .directory(new File(System.getProperty("user.dir")))
            .inheritIO()
            .start();
    System.exit(mvnProcess.waitFor());
} catch (final IOException ex) {
    System.err.format(IO_EXCEPTION);
    System.exit(1);
} catch (final InterruptedException ex) {
    System.err.format(INTERRUPTED_EXCEPTION);
    System.exit(1);
}

自从我调用 inheritIO() 以来,我一直期待子进程在控制台上输出,但什么也没有出现。我在这里缺少什么?

编辑:我知道我可以使用 mvnProcess.getInputStream() 并显式读取进程的输出,将其写入控制台(或任何地方)环形。但是我不喜欢这个解决方案,因为循环会阻塞我的线程。 inheritIO() 看起来很有前途,但显然我不明白它是如何工作的。我希望这里有人可以对此有所启发。

最佳答案

也许这是一个从子进程中读取它的选项:

start() 之后添加此代码,您将把它打印到标准输出:

    InputStream is = mvnProcess.getInputStream();
    InputStreamReader isr = new InputStreamReader(is);
    BufferedReader br = new BufferedReader(isr);
    String line;
    while ((line = br.readLine()) != null)
    {
        System.out.println(line);
    }

关于java - 在 Java 中重定向子进程的 I/O(为什么 ProcessBuilder.inheritIO() 不起作用?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17525441/

相关文章:

Python:进程/线程监控

haskell - haskell : how to force evaluation of functions and write to a file sequentially?

c - 在c中每次读取文件多个字节

java - 外部tomcat中spring的SSL配置

java - libGDX 导致多点触控问题

java - 欧拉计划 25 无限循环

java - 计算文本中的逗号(多线程),我做得对吗?

c++ - Boost Process 库 asynch_read 处理程序未调用

c# - 使用查询字符串打开 html 文件

c - 写入/dev/mem 失败,地址错误