广告
返回顶部
首页 > 资讯 > 后端开发 > GO >golang执行命令行的实现
  • 344
分享到

golang执行命令行的实现

golang执行命令行golang命令行 2022-11-11 21:11:13 344人浏览 安东尼
摘要

一般情况下,在 golang 中执行一些命令如 git clone,则可以使用 exec.Command 函数 func RunCommand(path, name string,

一般情况下,在 golang 中执行一些命令如 git clone,则可以使用 exec.Command 函数

func RunCommand(path, name string, arg ...string) (msg string, err error) {
    cmd := exec.Command(name, arg...)
    cmd.Dir = path
    err = cmd.Run()
    log.Println(cmd.Args)
    if err != nil {
        log.Println("err", err.Error(), "cmd", cmd.Args)
    }
    return
}

这种写法是没有问题,但是一旦执行出错返回值过于简洁了,比如

func main() {
    msg, err := common.RunCommand("./", "/bin/bash", "-c", "git clone url")
    if err != nil {
        log.Fatal(err)
        return
    }
    log.Println(msg)
}

执行后,返回 exit status 128 这种提示,太抽象了,还得专门去搜索引擎查看,若是想要看出更详细的原因还需如此

func RunCommand(path, name string, arg ...string) (msg string, err error) {
    cmd := exec.Command(name, arg...)
    var out bytes.Buffer
    var stderr bytes.Buffer
    cmd.Stdout = &out
    cmd.Stderr = &stderr
    cmd.Dir = path
    err = cmd.Run()
    log.Println(cmd.Args)
    if err != nil {
        msg = fmt.Sprint(err) + ": " + stderr.String()
        err = errors.New(msg)
        log.Println("err", err.Error(), "cmd", cmd.Args)
    }
    log.Println(out.String())
    return
}

再次执行,返回

2022/04/03 20:33:49 [/bin/bash -c git clone url]
2022/04/03 20:33:49 err exit status 128: fatal: repository 'url' does not exist
 cmd [/bin/bash -c git clone url]
2022/04/03 20:33:49 
2022/04/03 20:33:49 exit status 128: fatal: repository 'url' does not exist

 哦,原来是 repository 'url' does not exist 这个原因。

更进一步说下,为啥加了 Stdout 和 Stderr 就能接到值了呢,这是由于有些命令会把错误信息打到 Stdout,而也有些命令会把错误信息打到 Stderr,所以就得把两个都收着。

参考:How to debug “exit status 1” error when running exec.Command in Golang

到此这篇关于golang 执行命令行的实现的文章就介绍到这了,更多相关golang 执行命令行内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: golang执行命令行的实现

本文链接: https://www.lsjlt.com/news/121021.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作