猿问

执行时保留颜色代码

作为更大程序的一部分,我正在调用 grep,并将其结果输出到标准输出:


// execute grep command

cmd := exec.Command(GREP_BIN_PATH, argArray...)

stdout, err := cmd.StdoutPipe()

if err != nil {

    log.Fatal(err)

}

stderr, err := cmd.StderrPipe()

if err != nil {

    log.Fatal(err)

}


err = cmd.Start()

if err != nil {

    log.Fatal(err)

}

go io.Copy(os.Stdout, stdout)

go io.Copy(os.Stderr, stderr)

cmd.Wait()

如果我直接从终端对 grep 进行相同的调用,grep 将输出多色文本(例如,在其输出中以红色突出显示任何匹配项)。做一些研究,似乎grep/其他程序使用特殊的ansi颜色代码来更改颜色突出显示。


当我从 go 执行命令时,这些颜色去哪里了?有什么方法可以让我在 go 中执行以保留 ansi 颜色代码,并将输出从 grep 复制到标准输出(类似于此处的帖子,但对于 go)?


(我也知道我可以手动重新插入颜色代码。但这看起来很痛苦,我宁愿只是管道 grep 的原始颜色。)


如果问题中的某些内容不清楚/需要澄清,请告诉我。谢谢!


拉风的咖菲猫
浏览 216回答 1
1回答

浮云间

grep 和大多数其他使用颜色的工具在决定是否使用颜色时会检测它们是否将输出发送到终端。文件和管道等通常不需要颜色代码,也不知道如何处理它们。尽管如此,您grep仍然可以使用--color=always标志强制输出颜色。
随时随地看视频慕课网APP

相关分类

Go
我要回答