登录
首页 >  Golang >  Go问答

使用 Go exec 执行 git 命令并获取输出结果

来源:stackoverflow

时间:2024-02-08 11:54:23 255浏览 收藏

学习Golang要努力,但是不要急!今天的这篇文章《使用 Go exec 执行 git 命令并获取输出结果》将会介绍到等等知识点,如果你想深入学习Golang,可以关注我!我会持续更新相关文章的,希望对大家都能有所帮助!

问题内容

我对 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,但现在时间有限。


正确答案


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

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

    out, err := cmd.Output()
    if err != nil {
        return nil, err
    }

    lines := strings.Split(string(out), "\n")
    return lines, nil
}

终于介绍完啦!小伙伴们,这篇关于《使用 Go exec 执行 git 命令并获取输出结果》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>