小编典典

您如何在Go中获得系统命令的输出?

go

假设我要在go程序中运行“ls”,并将结果存储在字符串中。似乎有一些命令可以在exec和os包中派生进程,但是它们需要stdout等文件参数。是否有办法将输出作为字符串?


阅读 341

收藏
2020-07-02

共1个答案

小编典典

编辑: 此答案已过时。请在下面查看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))
    }
}
2020-07-02