小编Leo*_*nov的帖子

Go:按顺序接收os.cmd stdout和stderr

我需要从go执行子命令并分别处理stdout和stderr,同时保持stdin/stdout的输出顺序.我尝试了几种不同的方式,但无法实现正确的输出顺序; 以下代码显示ouput处理顺序绝对是随机的:

package main

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

var (
    result = ""
)

type writer struct {
    result string
    write  func(bytes []byte)
}

func (writer *writer) Write(bytes []byte) (int, error) {
    writer.result += string(bytes) // process result later
    result += string(bytes)
    return len(bytes), nil
}

func main() {
    cmd := exec.Command("bash", "-c", "echo TEST1; echo TEST2 1>&2; echo TEST3")

    stderr := &writer{}
    cmd.Stderr = stderr

    stdout := &writer{}
    cmd.Stdout = stdout

    err := cmd.Start()
    if err != …
Run Code Online (Sandbox Code Playgroud)

stdout exec go stderr

5
推荐指数
1
解决办法
883
查看次数

标签 统计

exec ×1

go ×1

stderr ×1

stdout ×1