简单执行go命令可以得到以下输出:How do you get the output of a system command in Go?? 但是我正在使用的代码用于显示来自https://blog.kowalczyk.info/article/wOYk/advanced-command-execution-in-go-with-osexec.html的进度输出? 现在,我实际上无法过滤从中获得的输出,因为我不想打印所有内容,而只打印其中一部分。有办法吗?
我已经尝试实现一个字符串来获取输出,而不是使用常规方法。但这没有用。我也想要进度。
答案 0 :(得分:0)
您指向的样本从子流程的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
作为w
调用此函数。
现在,您可以自由过滤数据d
,然后再用w.Write
打印出来。