如何从标准输出输出到一个字符串中golang
问题描述:
我有下面的代码从标准输出输出数据到一个文件:如何从标准输出输出到一个字符串中golang
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()
我需要从标准输出输出到一个字符串值,而不是文件。我如何实现这一目标?
是否有另一个函数,可以让我更改io.Copy行去io.Copy(myStringVariable,stdoutPipe),因为我需要读取命令的输出并对其应用一些处理?
在此先感谢
答
+0
简而又甜!谢谢 –
答
使用bytes.Buffer
。它本质上是一个[]byte
,它还实现了io.Reader和io.Writer接口(等等)。
cmd := exec.Command("ls","lh")
stdoutPipe, err := cmd.StdoutPipe()
if err != nil {
panic(err)
}
var buf bytes.Buffer
writer := bufio.NewWriter(buf)
defer writer.Flush()
err = cmd.Start()
if err != nil {
panic(err)
}
go io.Copy(writer, stdoutPipe)
cmd.Wait()
fmt.Println(string(buf.Bytes()))
答
您可以将输出[]byte
转换为string
设置文件为命令的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)
}
您可能刚刚将该文件分配为命令的Stdout,并避免了管道和复制goroutine(其中您正在丢失读/写错误), – JimB