假设我想在围棋程序中运行‘ls’,并将结果存储在字符串中.exec和os包中似乎有一些用于派生进程的命令,但它们需要stdout等的文件参数.有没有办法以字符串形式获得输出?
假设我想在围棋程序中运行‘ls’,并将结果存储在字符串中.exec和os包中似乎有一些用于派生进程的命令,但它们需要stdout等的文件参数.有没有办法以字符串形式获得输出?
Edit:这个答案已经过时了.请参见下面的Fatih Arslan's answer.
通过将Pipe指定为stdout(如果需要,还可以指定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))
}
}