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 として使用することができます。独自のプログラムが 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 に答える