我正在通过exec.Command
在Go中运行命令并扫描输出。在某些系统上,输出是即时的。但是在某些系统上,输出似乎已被缓冲。除非命令产生的数据量足够大,否则我实际上不会收到输出。
是否可靠地获得了更多即时输出?
package main
import (
"fmt"
"log"
"os/exec"
"time"
)
func main() {
cmd := exec.Command("udevadm", "monitor")
stdout, err := cmd.StdoutPipe()
if err != nil {
log.Fatal(err)
}
err = cmd.Start()
if err != nil {
log.Fatal(err)
}
for {
p := make([]byte, 10)
n, _ := stdout.Read(p)
fmt.Println("@ ", time.Now().Unix(), " ", n)
}
}
答案 0 :(得分:0)
我建议运行stdbuf -oL udevadm <args>
将有效地实现我所追求的(行缓冲输出)。