我正在通过 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)
}
}
最佳答案
我建议运行 stdbuf -oL udevadm <args>
将有效地实现我所追求的(行缓冲输出)。
关于go - 从 exec 命令 stdout 读取而不缓冲,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55542847/