Пример, на который вы указываете чтение из стандартного 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
.