À golang, Comment puis-je écrire le stdout d'un exec.Cmd à un fichier?
j'essaie d'exécuter une commande shell, de capturer stdout et d'écrire cette sortie dans un fichier. Cependant, il me semble que je manque quelques étapes, car le fichier que j'essaie d'écrire est vide lorsque le programme existe. Comment puis-je capturer le stdout de la commande et l'écrire dans un fichier?
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()
}
21
demandé sur
Tshepang
2013-09-24 20:20:43
3 réponses
Vous devez rincer à l'écrivain. Ajoutez la ligne suivante:
writer := bufio.NewWriter(outfile)
defer writer.Flush()
13
répondu
Kluyg
2013-09-24 16:27:24
merci à KirkMcDonald sur le #go-nuts
canal irc, j'ai résolu cela en assignant le fichier de sortie à cmd.Stdout
, ce qui signifie que stdout écrit directement dans le fichier. Il ressemble à ceci:
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()
}
33
répondu
jergason
2013-09-24 16:30:00
Vous pouvez aussi utiliser:
cmd.Stdout = os.Stdout
qui redirigera toute la sortie cmd vers la sortie standard du système D'exploitation.
9
répondu
cjhutchi
2015-03-07 19:04:10