登录
首页 >  Golang >  Go问答

使用管道在 Go 中将 npm install 进度条输出到终端的方法

来源:stackoverflow

时间:2024-02-14 13:09:23 324浏览 收藏

编程并不是一个机械性的工作,而是需要有思考,有创新的工作,语法是固定的,但解决问题的思路则是依靠人的思维,这就需要我们坚持学习和更新自己的知识。今天golang学习网就整理分享《使用管道在 Go 中将 npm install 进度条输出到终端的方法》,文章讲解的知识点主要包括,如果你对Golang方面的知识点感兴趣,就不要错过golang学习网,在这可以对大家的知识积累有所帮助,助力开发能力的提升。

问题内容

我尝试使用stdoutpipe和stderrpipe,如下所示。

shell := exec.command("npm", args...)
shell.dir = cwd

outpipe, _ := shell.stdoutpipe()
errpipe, _ := shell.stderrpipe()

shell.start()

go func(pipe io.readcloser) {
    reader := bufio.newreader(pipe)
    line, err := reader.readstring('\n')

    for err == nil {
        fmt.println(string(line))
        line, err = reader.readstring('\n')
    }

    fmt.println("exited")

}(outpipe)

go func(pipe io.readcloser) {

    reader := bufio.newreader(pipe)
    line, err := reader.readstring('\n')

    for err == nil {
        fmt.println(string(line))
        line, err = reader.readstring('\n')
    }

    fmt.println("exited")

}(errpipe)

err := shell.wait()

if err != nil {
    fmt.println(err)
}

但是我只得到输出:

added 87 packages, and audited 88 packages in 3s



9 packages are looking for funding

run `npm fund` for details



found 0 vulnerabilities

如何获取从控制台运行 npm install 时获得的安装进度条?

我还尝试使用如下解决方案并在运行 shell.run() 后打印缓冲区,但它也提供了与上面相同的输出。

shell := exec.Command(command, args...)
shell.Dir = cwd
var stderr, stdout bytes.Buffer

shell.Stderr = &stderr
shell.Stdout = &stdout

return shell, &stdout, &stderr

正确答案


已解决,感谢@Adrian的评论

cmd := exec.Command("npm", args...)
cmd.Dir = cwd

cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr

重定向到操作系统的标准输出和标准错误就是成功的秘诀。

今天关于《使用管道在 Go 中将 npm install 进度条输出到终端的方法》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

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