golang执行命令行的实现

golang执行命令行的实现

一般情况下,在 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 执行命令行内容请搜索易知道(ezd.cc)以前的文章或继续浏览下面的相关文章希望大家以后多多支持易知道(ezd.cc)!

推荐阅读

    清理电脑c盘命令|清理c盘命令行

    清理电脑c盘命令|清理c盘命令行,,1. 清理c盘命令行可以直接使用系统自带的工具删除C盘文件,更加安全,不会误删文件。鼠标点击电脑左下角的微

    golang代理怎么设置

    golang代理怎么设置,代理,请求,设置,语言,客户端,应用程序,Go语言(或称Golang)是一种广受欢迎的编程语言,尤其适用于网络编程。在创建Web应用程序

    什么是golang

    什么是golang,语言,执行,编程语言,机器语言,高级语言,运行,golang是一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言;它可以在不损

    电脑重启的命令|电脑重启的命令行

    电脑重启的命令|电脑重启的命令行,,1. 电脑重启的命令行在DOS命令行中shutdown -r -f -t命令,回车即可以将操作系统重新启动。重启电脑的操

    命令行快捷键|ubuntu命令行快捷键

    命令行快捷键|ubuntu命令行快捷键,,ubuntu命令行快捷键1、电脑屏幕旋转的快捷键是ctrl+alt+↓或↑或←或→键;2、屏幕旋转至正常位置ctrl+a