Estou escrevendo um programa em Go que executa um programa semelhante a um servidor (também Go). Agora, quero ter o stdout do programa filho na janela do terminal onde iniciei o programa pai. Uma maneira de fazer isso é com a cmd.Output()
função, mas ela imprime o stdout somente depois que o processo é encerrado. (Isso é um problema porque este programa semelhante a um servidor é executado por um longo tempo e eu quero ler a saída do log)
A variável out
é de type io.ReadCloser
e não sei o que devo fazer com ela para cumprir minha tarefa e não consigo encontrar nada de útil na web sobre esse assunto.
func main() {
cmd := exec.Command("/path/to/my/child/program")
out, err := cmd.StdoutPipe()
if err != nil {
fmt.Println(err)
}
err = cmd.Start()
if err != nil {
fmt.Println(err)
}
//fmt.Println(out)
cmd.Wait()
}
Explicação para o código: descomente a Println
função para obter o código para compilar, eu sei que Println(out io.ReadCloser)
não é uma função significativa.
(produz a saída &{3 |0 <nil> 0}
) Essas duas linhas são necessárias apenas para obter o código para compilar.
io.Copy
dentro das rotinas go
cmd.Wait()
ou fazer o for{}
loop ... por que estão aqui?