Фильтрация вывода терминального вывода с использованием golang - PullRequest
0 голосов
/ 07 февраля 2019

Простое выполнение команды go дает некоторый вывод, как показано здесь: Как вы получаете вывод системной команды в Go? ?Но код, который я использую, предназначен для отображения вывода с прогрессом от: https://blog.kowalczyk.info/article/wOYk/advanced-command-execution-in-go-with-osexec.html? Теперь я не могу на самом деле отфильтровать вывод, который я получаю из этого, так как я не хочу, чтобы все печаталось, и толькоЧасть этого.Есть ли способ сделать это?

Я уже пытался реализовать строку, чтобы получить вывод вместо обычного пути.Но это не сработало.Я тоже хочу прогресса.

1 Ответ

0 голосов
/ 07 февраля 2019

Пример, на который вы указываете чтение из стандартного stdout подпроцесса, и для каждого чтения он записывает то, что прочитал, в собственный stdout, а также записывает его:

func copyAndCapture(w io.Writer, r io.Reader) ([]byte, error) {
    var out []byte
    buf := make([]byte, 1024, 1024)
    for {
        n, err := r.Read(buf[:])
        if n > 0 {
            d := buf[:n]
            out = append(out, d...)
            _, err := w.Write(d)
            if err != nil {
                return out, err
            }
        }
        if err != nil {
            // Read returns io.EOF at the end of file, which is not an error for us
            if err == io.EOF {
                err = nil
            }
            return out, err
        }
    }
}

Эта функция вызывается с os.Stdout as w.

Теперь вы можете фильтровать данные d, прежде чем распечатать их с помощью w.Write.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...