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.