go - 从 exec 命令 stdout 读取而不缓冲

标签 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)
        }
}

最佳答案

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

关于go - 从 exec 命令 stdout 读取而不缓冲,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55542847/

相关文章:

for-loop - 从封闭 channel 读取的 for 循环中的 Select 语句永远给出零值

google-app-engine - Google Go SDK 还是 Golang 应用程序?

go - go get 的 TLS 问题

go - 如何在go lang中接收多帧二进制数据

go - 确定所有 worker 都完成

string - 从golang中的字节数组解压gzip

Golang在Struct数组中搜索特定项目

go - 为什么 vscode golang 插件在保存时删除运算符周围的空格?

go - 另一个文件中的调用函数

go - readString 与 readLine