write util readall read golang for files example bytes file-io go

file io - util - En Golang, ¿cómo puedo escribir el stdout de un exec.Cmd en un archivo?



write file golang (3)

Estoy intentando ejecutar un comando de shell, capturar la salida estándar y escribir esa salida en un archivo. Sin embargo, parece que me faltan algunos pasos, ya que el archivo que estoy tratando de escribir está vacío cuando el programa existe. ¿Cómo puedo capturar la salida estándar del comando y escribirlo en un archivo?

package main import ( "bufio" "io" "os" "os/exec" ) func main() { cmd := exec.Command("echo", "''WHAT THE HECK IS UP''") // open the out file for writing outfile, err := os.Create("./out.txt") if err != nil { panic(err) } defer outfile.Close() stdoutPipe, err := cmd.StdoutPipe() if err != nil { panic(err) } writer := bufio.NewWriter(outfile) err = cmd.Start() if err != nil { panic(err) } go io.Copy(writer, stdoutPipe) cmd.Wait() }


Gracias a KirkMcDonald en el canal irc #go-nuts , resolví esto asignando el archivo de salida a cmd.Stdout , lo que significa que stdout escribe directamente al archivo. Se parece a esto:

package main import ( "os" "os/exec" ) func main() { cmd := exec.Command("echo", "''WHAT THE HECK IS UP''") // open the out file for writing outfile, err := os.Create("./out.txt") if err != nil { panic(err) } defer outfile.Close() cmd.Stdout = outfile err = cmd.Start(); if err != nil { panic(err) } cmd.Wait() }


Necesitas sacar al escritor. Agregue lo siguiente:

writer := bufio.NewWriter(outfile) defer writer.Flush()


También puedes usar:

cmd.Stdout = os.Stdout

que redirigirá toda la salida de cmd a la salida estándar del sistema operativo.