golang 执行命令行的实现
作者:molaifeng 发布时间:2024-04-28 09:14:40
标签: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
来源:https://blog.csdn.net/molaifeng/article/details/123943715


猜你喜欢
- 首先你要确定错误的原因: 让IE显示详细的出错信息: 菜单--工具--Internet选项--高级--显示友好的HTTP错误信息,去掉这个选
- jquery作为一款高质量的框架被大多web开发者所推崇。jquery也的确是一款伟大的产品,在实际开发中明显提高了效率。但是任何产品并不是
- //如果之前有选中的,则把选中radio取消掉$("#tj_cat .pro_category").each(funct
- 一、前言很多网站提供视频转GIF的功能,但要么收费要么有广告实际上我们通过python,几行代码就能够实现视频转gif二、教程1. 安装必备
- 前言MySQL慢查询日志是我们在日常工作中经常会遇到的一个功能,MySQL慢查询日志提供了超过指定时间阈值的查询信息,为性能优化提供了主要的
- 死锁对于DBA或是数据库开发人员而言并不陌生,它的引发多种多样,一般而言,数据库应用的开发者在设计时都会有一定的考量进而尽量避免死锁的产生.
- 组合数据类型分类组合数据类型分为三类,第一类是集合类型,第二类是序列类型,第三类是映射类型集合类型集合类型是一个元素集合,元素之间没有排列顺
- 基于的phantomjs的自动化,会出现1.flash不支持2.部分基于view的按钮点不到,部分按钮是基于flash的(尤其是在于上传按钮
- 提高MySQL 查询效率的三个技巧小结MySQL由于它本身的小巧和操作的高效, 在数据库应用中越来越多的被采用.我在开发
- 图像轮廓概念轮廓是一系列相连的点组成的曲线,代表了物体的基本外形。谈起轮廓不免想到边缘,它们确实很像。简单的说,轮廓是连续的,边缘并不全都连
- 1.简单检索数据博客内容中student表为:1.1.检索单个列select + 列名 + from + 表名1.2.检索多个列select
- 一、值的类型 早在介绍JS的数据类型的时候就提到过基本类型和引用类型
- Scrapy是一个用Python实现的为了爬取网站数据、提取数据的应用框架。我们对于爬取到的数据存储到本地或数据库是经常要用到的操作。主要讲
- 在命令行输入mysql -u root –p,输入密码,或通过工具连接数据库时,经常出现下面的错误信息,相信该错误信息很
- 访问数组元素数组索引等同于访问数组元素。可以通过引用其索引号来访问数组元素。NumPy 数组中的索引以 0 开头,这意味着第一个元素的索引为
- 今天我们来学习用 Web 标准的方法来制作 Google 首页(中文)。Google 首页一直是用 table 布局的。我们把 Google
- 最近想备份网站,但是php下载文件的大小是有大小限制的,而我也懒得装ftp再下载了,就想着暂时弄个二级域名站,然后用python(pytho
- 远程登陆SQLServer (2014)数据库,供大家参考,具体内容如下两台电脑,同一个局域网内,IP同一网段配置:Computer1: W
- 目录什么是分区表分区表应用场景分区表的限制分区类型分区表的使用1、范围分区2、列表分区(list分区)3、列分区4、hash分区5、秘钥分区
- MooTools 1.2的整理排序类Sortables原文地址:30 Days of Mootools 1.2 Tutorials - Da