首页 > 解决方案 > Java 进程的输出始终为空

问题描述

我正在运行一个简单的单元测试以使用外部进程输出 Java 版本。输出出现在控制台中,进程运行成功,但调用 getInputStream() 时输出始终为空。我不明白为什么。

@Test
public void testProcess() throws IOException, InterruptedException, ExecutionException {
    ProcessBuilder processBuilder = new ProcessBuilder("java", "-version");
    processBuilder.inheritIO();
    processBuilder.redirectErrorStream(true);

    Process process = processBuilder.start();
    int exitCode = process.waitFor();
    assertEquals("No errors should be detected", 0, exitCode);

    BufferedReader output = new BufferedReader(new InputStreamReader(process.getInputStream()));
    List<String> results = output.lines()
        .collect(Collectors.toList());

    // This line always fails
    assertThat("Result should not be empty", results, is(not(empty())));
    assertThat("Result should contain java version: ", results, hasItem(containsString("java version")));

    //result.forEach(LOG::info);

}

结果总是空的,即使在 eclipse 中运行测试时命令运行并且版本显示在控制台中。

我只是在尝试一下 processbuilder 和 process。我在一些示例中看到在不同线程中读取响应,但这没有任何区别。它总是失败。同样,如果我包含对inheritIO 和redirectErrorStream 的调用,则没有区别。

谢谢。

标签: javaprocess

解决方案


推荐阅读