golang:cmd.Exec():我如何读取非缓冲的stdout应用程序?

时间:2015-08-31 01:05:20

标签: go subprocess stdout

所以我有一个简单的应用程序启动其他应用程序并读取其输出。

package main

import (
    "bufio"
    "io"
    "log"
    "os/exec"
    "time"
)

func main() {
    cmd := exec.Command("perl", "-e", "my $x = 0; while (1) { print ++$x.qx'date'; sleep 1; }")
    stdout, _ := cmd.StdoutPipe()
    stderr, _ := cmd.StderrPipe()

    in := bufio.NewReaderSize(io.MultiReader(stdout, stderr), 100)
    cmd.Start()
    defer cmd.Wait()
    for {
        log.Printf("....")
        time.Sleep(1 * time.Second)
        l, _ := in.ReadString('\n')
        log.Printf(string(l))
    }
}

真正的应用程序的要点是读取正在运行的进程的输出并解析它..但它不适用于没有明确同步/刷新其标准输出的真实应用程序(它需要约60行{{ 1}}开始打印前输出。)

逐字节读取输出的最有效方法是什么?

0 个答案:

没有答案