Java 捕获带有颜色的过程输出

Fra*_*bek 7 java cmd

有没有办法从带有颜色格式数据的进程中捕获控制台输出?目前我只捕获文本输出:

ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/C", "mvn dependency:resolve");
// mvn dependency:resolve is an example of a process that outputs color
Process p = builder.start();
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = null;
while ((line = reader.readLine()) != null) 
{
   System.out.println(line);
}
Run Code Online (Sandbox Code Playgroud)

但是我找不到捕获此文本颜色数据的方法。彩色文本似乎没有以任何特殊字符或任何东西开头。

我正在将此捕获的文本打印到 UI 以供用户查看此过程的日志,但很难阅读,因此我想从控制台复制颜色。

这是一个如何在 Go 中完成的示例,但这可以在 Java 中完成吗?

这个应用程序将在 Windows 上运行,但如果它也可以通过从 Shell 或 Bash 读取相同的颜色数据,也可以在 Linux 或 MacOS 上运行,那就太好了。

nvi*_*dot 7

您面临的问题与 Java 功能并不严格相关。

发生的情况是,许多程序检查 stdin 是终端还是管道并以不同方式生成输出,例如删除颜色格式。有时通过使用特殊选项来强制生成那些颜色格式1直接存在解决方法。

如果这在您使用的二进制文件中不可用,那么显然唯一的解决方案是编写您自己的伪 tty,使目标二进制文件认为它与常规 tty 对话。

您可以尝试使用此处提供的代码2,或者您可以查看JetBrains/pty4j,看看您是否可以根据需要对其进行调整。