小编zso*_*t.k的帖子

Go - 组合cmd.StdoutPipe和Cmd.StderrPipe

我想在Go中执行一个命令,并将其stdout和stderr组合成一个流.我写了这段代码,它只读取了stdout,但我不知道如何将它与stderr结合起来:

package main

import (
    "fmt"
    "os"
    "os/exec"
    "bufio"
)

func runCommand() {
    var (
        err error
    )

    cmdName := "docker"
    cmdArgs := []string{"build", "--no-cache=true", "--force-rm=true", "."}

    cmd := exec.Command(cmdName, cmdArgs...)

    cmdReader, err := cmd.StdoutPipe()
    if err != nil {
        fmt.Fprintln(os.Stderr, "Error creating StdoutPipe for Cmd", err)
    }

    scanner := bufio.NewScanner(cmdReader)
    go func() {
        for scanner.Scan() {
            fmt.Printf("docker build out | %s\n", scanner.Text())
        }
    }()

    err = cmd.Start()
    if err != nil {
        fmt.Fprintln(os.Stderr, "Error starting Cmd", err)
    }

    err …
Run Code Online (Sandbox Code Playgroud)

exec go

4
推荐指数
2
解决办法
870
查看次数

标签 统计

exec ×1

go ×1