我试过使用stdoutpipe and 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)
}

However I only get output:

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时,如何获得安装进度条?

我也try 过使用类似下面的解决方案,并在运行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的 comments

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

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

重定向到os's stdout and stderr是起作用的原因.

Go相关问答推荐

如何创建两个连接的io.ReadWriteClosers以用于测试目的

如何从google.golang.org/grpc/stats包中将golang中不同事件的输出进行组合,以获取func HandlePRC

Go:嵌入类型不能是类型参数""

如何在gofr发起的服务间调用请求中添加Authorization Header?

为什么(编码器).EncodeElement忽略";,innerxml";标记?

在Golang中Mergesort的递归/并行实现中出现死锁

Go中的Slice[:1][0]与Slice[0]

在 Go 中将元数据从一个 JPEG 复制到另一个

无法在go中为docker容器写入有效的挂载路径

在golang中以JSON格式获取xwwwformurlencoded请求的嵌套键值对

如何为导入的嵌入式 struct 文字提供值?

如何仅提取时间作为持续时间

不能在 *gorm.db 而不是 gorm.db 上使用 WithContext(ctx) 方法

如何在 golang revel 中获取动态应用程序配置

go 是否对 struct 使用空间填充之类的东西?

从另一个没有重复的确定性 int

Golang 泛型

退格字符在围棋操场中不起作用

并发 map map导致的 Golang 数据竞争

是否可以动态加载 Go 代码?