我需要从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)