假设我要在go程序中运行“ls”,并将结果存储在字符串中。似乎有一些命令可以在exec和os包中派生进程,但是它们需要stdout等文件参数。是否有办法将输出作为字符串?
编辑: 此答案已过时。请在下面查看FatihArslan的答案。
通过指定Pipe作为标准输出(如果需要,还可以使用stderr)来使用exec.Run。它将返回cmd,其中在Stdout(和Stderr)字段中包含os.File。然后,您可以使用ioutil.ReadAll读取它。
例:
package main import ( "exec"; "io/ioutil"; ) func main() { if cmd, e := exec.Run("/bin/ls", nil, nil, exec.DevNull, exec.Pipe, exec.MergeWithStdout); e == nil { b, _ := ioutil.ReadAll(cmd.Stdout) println("output: " + string(b)) } }