登录
首页 >  Golang >  Go问答

使用 golang 过滤终端输出的输出

来源:stackoverflow

时间:2024-02-27 20:57:26 397浏览 收藏

来到golang学习网的大家,相信都是编程学习爱好者,希望在这里学习Golang相关编程知识。下面本篇文章就来带大家聊聊《使用 golang 过滤终端输出的输出》,介绍一下,希望对大家的知识积累有所帮助,助力实战开发!

问题内容

简单执行 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? 现在,我实际上无法过滤从中获得的输出,因为我不希望打印所有内容,而只打印其中的一部分。有没有办法做到这一点?

我已经尝试实现一个字符串来获取输出而不是常规方式。但这没有用。我也想要进步。


解决方案


您指向的示例从子进程的标准输出读取,并且对于每次读取,它都会将读取的内容写入自己的标准输出,同时捕获它:

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

现在,您可以在使用 w.write 打印数据之前自由过滤数据 d

今天关于《使用 golang 过滤终端输出的输出》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>