如何从exec.Command获取完整的Stdout?

时间:2016-05-04 10:12:34

标签: go

我有这个代码,我也希望在完成文本提取等时获得cmd.Stdout的完整输出。

func main() {
    cmd := exec.Command("readinggame")
    cmd.Stdout = os.Stdout
    cmd.Run()
}

我似乎无法找到一种方法,可以在输出完成时将输出设为[]bytestring。顺便说一下,我不想用ReadLine(或类似的东西)迭代输出,这恰好运行良好,我只想要一个完整的输出,比如

var out bytes.Buffer
cmd.Stdout = &out
if err := cmd.Run(); err != nil {
    log.Fatal(err)
}
fmt.Println(out.String())

1 个答案:

答案 0 :(得分:4)

这完全是预期的结果......所需要的只是io.MultiWriter

func main() {

    cmd := exec.Command("ping", "google.com")

    var out bytes.Buffer
    multi := io.MultiWriter(os.Stdout, &out)
    cmd.Stdout = multi

    if err := cmd.Run(); err != nil {
        log.Fatalln(err)
    }

    fmt.Printf("\n*** FULL OUTPUT *** %s\n", out.String())

}