我想在 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
波斯汪
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)
- 2 回答
- 0 关注
- 865 浏览
添加回答
举报
0/150
提交
取消
