I have the following code which outputs data from stdout to a file:
cmd := exec.Command("ls","lh")
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)
defer writer.Flush()
err = cmd.Start()
if err != nil {
panic(err)
}
go io.Copy(writer, stdoutPipe)
cmd.Wait()
I need to get the output from stdout into a string value instead of a file. How do I achieve that?
Is there perhaps another function that will allow me to change the io.Copy line to go io.Copy(myStringVariable, stdoutPipe) as I need to read the output of the command and apply some processing to it?
Thanks in advance
You don't need the pipe, writer, goroutine, etc. Just use Cmd.Output
out, err := exec.Command("ls","lh").Output()
You can convert the output []byte
to a string
as needed with string(out)
You can set the file as the command's stdout
f, err := os.Create("./out.txt")
if err != nil {
panic(err)
}
defer f.Close()
cmd := exec.Command("ls", "-lh")
cmd.Stdout = f
cmd.Stderr = os.Stderr
if err := cmd.Run(); err != nil {
panic(err)
}