【问题标题】:stream stdout from other program without for loop来自其他程序的流标准输出,没有 for 循环
【发布时间】:2012-10-12 06:47:47
【问题描述】:

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

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

【问题讨论】:

    标签: go


    【解决方案1】:

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

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

    【讨论】:

    • 很好,这正是我要找的
    猜你喜欢
    • 2014-10-06
    • 1970-01-01
    • 1970-01-01
    • 2021-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多