Чтение из команды exec stdout без буферизации - PullRequest
0 голосов
/ 05 апреля 2019

Я запускаю команду в Go через exec.Command и сканирую вывод. В некоторых системах вывод является немедленным. Но в некоторых системах вывод выглядит буферизированным. Если объем данных, создаваемых командой, не достаточно велик, я фактически не получаю вывод.

Есть ли способ получить более быстрый вывод, надежно?

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 голосов
/ 05 апреля 2019

Я предполагаю, что выполнение stdbuf -oL udevadm <args> будет эффективно достигать того, что я делаю (вывод с буферизацией строки).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...