【发布时间】:2018-01-29 01:39:46
【问题描述】:
有没有办法从带有颜色格式数据的进程中捕获控制台输出?目前我只捕获文本输出:
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);
}
但我找不到捕获此文本颜色数据的方法。彩色文本似乎没有以任何特殊字符或任何内容开头。
我正在将此捕获的文本打印到 UI 以供用户查看此过程的日志,但它很难阅读,因此我想从控制台复制颜色。
Here is an example 如何在 Go 中完成,但是这可以在 Java 中完成吗?
此应用程序将在 Windows 上运行,但如果它也可以通过从 Shell 或 Bash 读取相同的颜色数据在 Linux 或 MacOS 上运行,那就太好了。
【问题讨论】:
-
捕获的输出是由批处理文件还是由应用程序完成的?控制台中的文本着色是如何完成的?是使用ANSI escape sequences 还是直接修改控制台的属性来完成。捕获的文本流缓冲区只能是字符,而不是输出字符的图形表示。
-
我正在运行 msbuild 命令来构建 C# 解决方案:msdn.microsoft.com/en-us/library/0k6kkbsd.aspx
-
请提供有关控制台中文本“着色”的更多详细信息以及一些指示它是什么颜色的示例输出。
-
@Bohemian 问题不在于如何打印颜色。它是关于如何从 ProcessBuilder 的输出中找到现有的颜色数据。换句话说,我有一个将彩色文本输出到 bash 或 cmd 的现有进程,但我需要我的 Java 应用程序来读取文本内容和 文本颜色。例如here is how it is done in Go。我如何在 Java 中做同样的事情?
-
如果我需要使用 BufferedReader(如上所示)或 ProcessBuilder 以外的东西来运行我的 cmd/bash 脚本来生成对我来说可以的输出。