如何将 npm 安装进度条通过管道传输到终端?

我试过使用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


侃侃尔雅
浏览 160回答 1
1回答

慕尼黑5688855

cmd := exec.Command("npm", args...)cmd.Dir = cwdcmd.Stdout = os.Stdoutcmd.Stderr = os.Stderr重定向到os 的 stdout 和 stderr就是诀窍。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go