为了账号安全,请及时绑定邮箱和手机立即绑定

Go - 结合 cmd.StdoutPipe 和 Cmd.StderrPipe

Go - 结合 cmd.StdoutPipe 和 Cmd.StderrPipe

Go
慕盖茨4494581 2021-12-20 19:09:38
我想在 Go 中执行一个命令,并将其 stdout 和 stderr 合并到一个流中。我写了这段代码,它只能从标准输出中读取,但我不知道如何将它与标准错误结合起来:package mainimport (    "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 = cmd.Wait()    if err != nil {        fmt.Fprintln(os.Stderr, "Error waiting for Cmd", err)    }}func main() {    runCommand()}感谢所有的答案!
查看完整描述

2 回答

?
拉丁的传说

TA贡献1789条经验 获得超8个赞

要将 stdout 和 stderr 组合到单个读取器,请将单个管道分配给 Command.Stdout 和 Command.Stderr:


cmdReader, err := cmd.StdoutPipe()

cmd.Stderr = cmd.Stdout


查看完整回答
反对 回复 2021-12-20
?
波斯汪

TA贡献1811条经验 获得超4个赞

使用该函数io.MultiReader将多个阅读器合二为一:


outReader, err := cmd.StdoutReader()

if err != nil {

    // handle err

}


errReader, err := cmd.StderrReader()

if err != nil {

    // handle err

}


cmdReader := io.MultiReader(outReader, errReader)


查看完整回答
反对 回复 2021-12-20
  • 2 回答
  • 0 关注
  • 865 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号