Java Process的输出始终为空

时间:2019-02-18 21:45:17

标签: java process

我正在运行一个简单的单元测试,以使用外部流程输出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。在一些示例中,我看到了在不同线程中读取响应的情况,但这并没有任何区别。它总是失败。同样,如果我包含对heriterIO和redirectErrorStream的调用,则没有任何区别。

谢谢。

0 个答案:

没有答案