java - 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 的调用,则没有区别。
谢谢。
解决方案
推荐阅读
- oracle-apex - 具有行跨度的 Oracle APex 经典报告行模板
- kubernetes - Kubernetes(在 Docker for Windows 中)Postgres 的卷配置
- typescript - 如何使用任意字符串键声明类型化对象 - 缺少索引签名?
- java - 如何避免函数有多个参数
- json - Flutter用数组解析JSON
- pandas - 通过将行转换为列来重塑(分组或旋转)熊猫数据框
- reactjs - 使用来自 api 调用的 reducer 异步更新状态
- python - 有没有办法在训练步骤之后直接更新层/变量的权重?
- c - 从 scanf 输入值但打印不同的值
- javascript - 如何从 getDataRange() 中排除标题行?