亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 735 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號