golang 执行命令行
一般情况下,在 golang
中执行一些命令如 git clone
,则可以使用 exec.Command
函数
func RunCommand(path, name string, arg ...string) (msg string, err error) {cmd := exec.Command(name, arg...)cmd.Dir = patherr = 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.Buffervar stderr bytes.Buffercmd.Stdout = &outcmd.Stderr = &stderrcmd.Dir = patherr = 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 existcmd [/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 执行命令行相关推荐
- 在LoadRunner向远程Linux/Unix执行命令行并收集性能数据
前面介绍过在LoadRunner的Java协议实现"使用SSH连接Linux",当然连接之后的故事由你主导. 今天要讲的,是一个非Java版本.是对"在LoadRunne ...
- 命令逐行显示_在LoadRunner中执行命令行程序之:popen()取代system()
>>>推荐阅读<<< 1.性能测试学习笔记-场景设计 2.性能测试的重要意义 3.性能分析流程及方法 4.应用系统性能调优之性能分析 在LoadRunner中执行命 ...
- python基础之os.system函数执行命令行语句
前言 os.system方法是os模块最基础的方法,其它的方法一般在该方法基础上封装完成. os的system原理 system函数可以将字符串转化成命令在服务器上运行:其原理是每一条system函数 ...
- runtime java_Java runtime.getruntime()从执行命令行程序获得输出
Java runtime.getruntime()从执行命令行程序获得输出 我正在使用运行时从我的Java程序运行命令提示符命令.但是,我不知道如何获得命令返回的输出. 这是我的代码:Runtime ...
- 执行命令行并等待完成
function TDMDb.WaitExeFinish(const sCmdName: string):boolean; var StartupInfo: TStartupInfo; Process ...
- golang同时使用命令行参数和配置文件
面试:你懂什么是分布式系统吗?Redis分布式锁都不会?>>> golang同时使用命令行参数和配置文件 [toc] 之前使用过spring-boot框架,在配置参数传递上可以 ...
- golang 运行命令行进行图片格式转换(jpg转png)
1.golang 运行命令行 cmd := exec.Command(命令, 传入参数1, 传入参数2,...) cmd.Stdout = os.Stdout if err := cmd.Run(); ...
- [笔记]Windows核心编程《番外篇》几种常见的执行命令行方法
文章目录 前言 WinExec 作用 实例 CreateProcess 作用 实例 System popen ShellExecute ShellExecute ShellExecuteEx 区别比较 ...
- Mac OS开机启动自动执行命令行
Mac OS开机启动自动执行命令行 公司的打包服务器升级需要频繁重启,或者物业断电而必须关机时,下次开机都需要手动启动一些服务,这样就显得非常麻烦,故需要进行配置使得Mac开机后自动启动服务. 首先编 ...
最新文章
- OpenCV中resize函数五种插值算法的实现过程
- Oracle Advanced Security:Column Encryption Overhead
- TestBird频现国内手游“盛宴” 开发商互相介绍用得很赞
- 【错误记录】Oboe / AAudio 播放器报错 ( onEventFromServer - AAUDIO_SERVICE_EVENT_DISCONNECTED - FIFO cleared )
- Arduino产生PWM的3种方法
- 2.11 总结-深度学习第三课《结构化机器学习项目》-Stanford吴恩达教授
- command对象的ExecuteScalar方法
- HTML+CSS页面练习——legend第九部分
- 虚拟机 ubuntu10.04 安装 Mercury MW150U 无线网卡(AR9271芯片组)
- jdbc显示mysql的数据_JDBC链接mysql插入数据后显示问号的原因及解决办法
- 序列化:protobuf原理
- 直播视频网站源码,延迟的几种方式
- 全国、省、地级市、区县乡镇级矢量地图2021年(最新)
- Java精品源码第83期在线旅游网站系统(推荐)
- 【历史上的今天】1 月 5 日:正则表达式的发明人出生;英特尔发布酷睿系列;Microsoft Bob 诞生
- Pytorch机器学习(六)——YOLOV5中的自适应图片缩放letterbox
- C++基础学习-33模板全特化、偏特化(局部特化)
- ehvierwer登录与不登录_【更新】亿寻—免登录不限速下载百度网盘
- GoogleHacking
- Crazy Engine 3.0(又名盘古引擎)的技术特性
热门文章
- 用python分析小说_用Python分析《斗破苍穹》
- linux驱动之总线详解
- Mysql-事务篇(1)
- java画二维坐标_在图形界面中绘制二维的坐标系统
- linux内核模块编程(六)----字符设备驱动中断开发
- 数据结构(十九) -- C语言版 -- 树 - 树、森林、二叉树的江湖爱恨情仇、相互转换
- [week3]每周总结与工作计划
- 服务器占用cpu启动就死机,CPU使用率高会不会造成死机?为何?
- JavaWeb和JavaScript的学习
- host, origin, referrer的区别