我有一个程序可以编译并运行另一个程序并将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循环重复检查我该怎么做呢,是否有一个库函数做同样的事情?
答案 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()