从exec命令标准输出读取而不进行缓冲

时间:2019-04-05 20:23:04

标签: go

我正在通过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)
        }
}

1 个答案:

答案 0 :(得分:0)

我建议运行stdbuf -oL udevadm <args>将有效地实现我所追求的(行缓冲输出)。