3

我有一个程序可以编译并运行另一个程序并将标准输出通过管道传输到自身进行打印,因为该程序不会终止,所以我需要将它的标准输出流式传输

// 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 循环的情况下做同样的事情,是否有一个库函数可以做同样的事情?

4

1 回答 1

12

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

command := exec.Command("go", "run", "my-program.go")
command.Stdout = os.Stdout
command.Start()
command.Wait()
于 2012-10-11T22:47:47.057 回答