从没有for循环的其他程序流stdout

时间:2012-10-11 22:30:10

标签: go

我有一个程序可以编译并运行另一个程序并将stdout传送给自己进行打印,因为该程序没有终止所以我需要流式传输它的stdout

// boilerplate ommited

func stream(stdoutPipe io.ReadCloser) {
    buffer := make([]byte, 100, 1000)
    for ;; {
        n, err := stdoutPipe.Read(buffer)
        if err == io.EOF {
            stdoutPipe.Close()
            break
        }
        buffer = buffer[0:n]
        os.Stdout.Write(buffer)
    }
}

func main() {
    command := exec.Command("go", "run", "my-program.go")
    stdoutPipe, _ := command.StdoutPipe()

    _ = command.Start()

    go stream(stdoutPipe)

    do_my_own_thing()

    command.Wait()
}

它可以工作,但是如果不用for循环重复检查我该怎么做呢,是否有一个库函数做同样的事情?

1 个答案:

答案 0 :(得分:11)

您可以将exec.Cmd io.Writer用作stdout。您自己的程序用于stdout(os.Stdout)的变量也是io.Writer

command := exec.Command("go", "run", "my-program.go")
command.Stdout = os.Stdout
command.Start()
command.Wait()