【问题标题】:Collect git command's output with Go exec使用 Go exec 收集 git 命令的输出
【发布时间】:2022-08-02 20:20:57
【问题描述】:

我对 Go 非常陌生;作为一些创新时间的一部分,我决定尝试一下。我想做的是运行一些命令,并处理它们的输出。

我想出了这个函数来运行命令:

func IssueCommand(command string, args []string) ([]string, error) {
    cmd := exec.Command(command, args[0:len(args)]...)

    stdout, err := cmd.StdoutPipe()
    err = cmd.Start()

    if err != nil {
        return nil, err
    }

    defer cmd.Wait()
    buff := bufio.NewScanner(stdout)

    var returnText []string

    for buff.Scan() {
        returnText = append(returnText, buff.Text())
    }

    return returnText, nil
}

我想运行这个 git 命令:

 git -C /something/something rev-list --count --date=local --all --no-merges

但是,结果我一直得到一个空数组。我尝试像这样调用函数:

args := [7]string{\"-C \", path, \"rev-list\", \"--count\", \"--date=local\", \"--all\", \"--no-merges\"}
result, err := IssueCommand(\"git\", args[0:len(args)])

还尝试修改 IssueCommand 函数以将字符串作为参数;我这样称呼它:

cmd := \"-C \" + path + \" rev-list --count --date=local --all --no-merges\"
result, err := IssueCommand(\"git\", cmd)

我两次都得到了一个空数组。它确实捕获了 ls 或 pwd 等命令的输出。

同样,我只是想感受一下 Go,我会使用 RTFM,但我现在时间有限。

    标签: go


    【解决方案1】:

    如果您打算同步运行该命令并获取其输出,最简单的方法是使用cmd.Output()(运行命令并收集标准输出)或cmd.CombinedOutput()(运行命令并收集标准错误+标准输出)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-28
      • 2019-10-09
      • 1970-01-01
      • 2017-11-08
      • 2021-05-05
      • 1970-01-01
      • 2014-02-06
      • 1970-01-01
      相关资源
      最近更新 更多