Estoy escribiendo un programa en Go que ejecuta un programa similar a un servidor (también Go). Ahora quiero tener la salida estándar del programa secundario en la ventana de mi terminal donde inicié el programa principal. Una forma de hacer esto es con la cmd.Output()función, pero esta imprime la salida estándar solo después de que el proceso haya finalizado. (Eso es un problema porque este programa similar a un servidor se ejecuta durante mucho tiempo y quiero leer la salida del registro)
La variable outes de type io.ReadClosery no sé qué debo hacer con ella para lograr mi tarea, y no puedo encontrar nada útil en la web sobre este tema.
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()
} 
Explicación del código: descomente la Printlnfunción para que el código se compile, sé que Println(out io.ReadCloser)no es una función significativa. 
 (produce la salida &{3 |0 <nil> 0}) Estas dos líneas solo son necesarias para que el código se compile.
fuente

io.Copydentro de las rutinas de gocmd.Wait()o elfor{}bucle ... ¿por qué están aquí?Respuestas:
No es necesario meterse con tuberías o goroutines, este es fácil.
fuente
cmd.Stdin = os.Stdincomo si hubiera ejecutado literalmente ese comando desde su shell.loglugar de stdout, hay una respuesta aquíCreo que si importa
ioyosy sustituir este:con este:
(ver documentación para
io.Copyy paraos.Stdout), hará lo que quieras. (Descargo de responsabilidad: no probado).Por cierto, probablemente también querrá capturar el error estándar, utilizando el mismo enfoque que para la salida estándar, pero con
cmd.StderrPipeyos.Stderr.fuente
os.Stdout) y (2) confirmar la premisa de que, si no llamacmd.StdoutPipe()en absoluto, la salida estándar va a la/dev/nullsalida estándar del proceso padre en lugar de hacerlo .Para aquellos que no necesitan esto en un bucle, pero les gustaría que la salida del comando se hiciera eco en la terminal sin tener que
cmd.Wait()bloquear otras declaraciones:fuente