io.MultiWriter удаляет цвета вывода из вывода - PullRequest
0 голосов
/ 09 апреля 2020

При использовании exec.Command для запуска другой команды, которая выводит цвет, например,

func main() {
    c := exec.Command("node-gyp", "rebuild")
    c.Stdin = os.Stdin
    c.Stdout = os.Stdout
    c.Stderr = os.Stderr
    c.Run()
}

, она работает как ожидается и выводит цветной текст на терминал, например:

colored terminal

Однако, рассмотрим, хотим ли мы также захватить выходной поток для дальнейшего использования. Мы могли бы сделать что-то вроде этого (цветной вывод на stderr):

func main() {
    c := exec.Command("node-gyp", "rebuild")
    c.Stdin = os.Stdin
    c.Stdout = os.Stdout
    var buf bytes.Buffer
    c.Stderr = io.MultiWriter(os.Stderr, &buf)
    c.Run()
    // do something with buf
}

Теперь все в черно-белом:

monochrome output

Это вызывает два вопроса:

  • Что здесь происходит? Как простой акт по существу выполнения tee в потоке Writer может привести к исчезновению терминальных цветов (которые, как я предполагаю, являются символами UTF-8)?
  • Если вместо этого вы используете exec.Command("ls", "--color"), цвета появляются в обоих случаях. Почему цвета здесь работают, а не для node-gyp rebuild? Если они кодируются по-разному, в чем разница?
...