Go 语言 exec 包
在 Go 中执行外部命令、调用系统程序核心就是使用标准库os/exec。它能启动进程、传递参数、读写输入输出、控制超时是脚本化、自动化、调用第三方工具的必备能力。本文实例讲解exec包常用用法。一、exec 包核心概念os/exec用于创建和控制子进程与直接系统调用不同自带安全处理不会自动注入 Shell更安全支持分离Stdout/Stderr/Stdin可等待、杀死、设置超时、获取退出码多平台通用常用结构与函数exec.Command(name, arg...)创建命令对象cmd.Run()运行并等待完成cmd.Output()运行并返回标准输出cmd.CombinedOutput()返回 stdout stderrcmd.Start()cmd.Wait()异步启动异步等待cmd.StdoutPipe()实时读取输出二、最简单示例执行命令并获取输出1. 获取命令输出Outputpackagemainimport(fmtos/exec)funcmain(){// Linux/macOScmd:exec.Command(echo,hello go exec)// Windows: cmd : exec.Command(cmd, /c, echo hello go exec)output,err:cmd.Output()iferr!nil{fmt.Printf(执行失败: %v\n,err)return}fmt.Printf(输出结果: %s\n,output)}Output()会在命令非0退出码时返回错误返回的output是[]byte直接转字符串即可2. 获取 stdout stderrCombinedOutput当需要把日志和错误一起收集时使用output,err:cmd.CombinedOutput()三、只运行不获取输出Run只关心命令是否成功不关心输出cmd:exec.Command(sleep,1)err:cmd.Run()iferr!nil{fmt.Println(执行失败:,err)}四、实时输出不等待缓冲区满以前遇到过坑命令输出很长时Output() 会阻塞。正确做法是用管道实时读取packagemainimport(ioosos/exec)funcmain(){// Linux/macOScmd:exec.Command(ping,192.168.0.1,-c,3)// Windows: exec.Command(ping, 192.168.0.1, -n, 3)stdout,err:cmd.StdoutPipe()iferr!nil{panic(err)}cmd.Stderros.Stderr// 错误直接输出iferr:cmd.Start();err!nil{panic(err)}// 实时读取输出io.Copy(os.Stdout,stdout)// 等待命令结束iferr:cmd.Wait();err!nil{panic(err)}}Start()异步启动Wait()等待子进程退出io.Copy实时流输出五、给命令传输入Stdin向子进程输入内容packagemainimport(os/execstrings)funcmain(){// 将字符串作为标准输入传给 catcmd:exec.Command(cat)cmd.Stdinstrings.NewReader(我是输入内容\nhello exec)output,err:cmd.CombinedOutput()iferr!nil{panic(err)}println(string(output))}六、设置工作目录、环境变量cmd:exec.Command(ls)cmd.Dir/tmp// 工作目录cmd.Env[]string{// 环境变量PATH/usr/bin:/bin,MY_ENVtest,}七、带超时的安全调用防止命令卡死packagemainimport(contextos/exectime)funcmain(){// 5秒超时ctx,cancel:context.WithTimeout(context.Background(),5*time.Second)defercancel()// 传入ctxcmd:exec.CommandContext(ctx,sleep,10)err:cmd.Run()iferr!nil{// 超时会返回 ctx 错误println(命令结束:,err)}}八、获取退出码Go 没有直接返回ExitCode()需要类型断言iferr!nil{ifexitErr,ok:err.(*exec.ExitError);ok{fmt.Println(退出码:,exitErr.ExitCode())}}九、坑点不要手动拼接命令字符串错误exec.Command(echo hello world)// 错正确exec.Command(echo,hello,world)Windows 要调用 cmd /cexec.Command(cmd,/c,dir)输出乱码Windows 下命令多为 GBK需要转码。packagemainimport(bytesioos/execgolang.org/x/text/encoding/simplifiedchinesegolang.org/x/text/transform)funcmain(){// Windows 执行 ipconfigcmd:exec.Command(ipconfig)varbuf bytes.Buffer// 输出GBK → UTF-8cmd.Stdouttransform.NewWriter(buf,simplifiedchinese.GBK.NewDecoder())cmd.Stderrtransform.NewWriter(buf,simplifiedchinese.GBK.NewDecoder())_cmd.Run()println(buf.String())// 中文不乱码}Output() 会阻塞大量输出必须用StdoutPipe实时消费。不处理 Stdout/Stderr 可能导致死锁输出缓冲区满会阻塞子进程程序卡住。packagemainimport(os/exec)// 这个程序会 100% 卡死funcmain(){// 生成大量输出的命令// Windows: cmd /c echo 大量行for /L %i in (1,1,5000) do echo 这是一行测试数据cmd:exec.Command(cmd,/c,echo 大量行for /L %i in (1,1,5000) do echo 这是一行测试数据)// 关键错误不设置 Stdout、Stderr// 管道缓冲区会被填满子进程阻塞cmd.Run() 永远不返回err:cmd.Run()println(永远到不了这里,err)}

相关新闻

figmaCN:消除语言障碍的Figma界面本地化解决方案

figmaCN:消除语言障碍的Figma界面本地化解决方案

figmaCN:消除语言障碍的Figma界面本地化解决方案 【免费下载链接】figmaCN 中文 Figma 插件,设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN 痛点:设计效率的隐形阻碍 专业术语理解困境 当前Figma全英文界…

2026/7/3 10:05:35 阅读更多 →
如何高效处理GB级JSON文件?HugeJsonViewer性能优化实战指南

如何高效处理GB级JSON文件?HugeJsonViewer性能优化实战指南

如何高效处理GB级JSON文件?HugeJsonViewer性能优化实战指南 【免费下载链接】HugeJsonViewer Viewer for JSON files that can be GBs large. 项目地址: https://gitcode.com/gh_mirrors/hu/HugeJsonViewer 在数据处理和开发调试过程中,大型JSON文…

2026/7/2 22:03:39 阅读更多 →
华大MCU实战:HC32F460串口DMA+中断模式下的数据收发优化与避坑指南

华大MCU实战:HC32F460串口DMA+中断模式下的数据收发优化与避坑指南

1. 为什么要在HC32F460上折腾串口DMA中断? 如果你是从STM32这类MCU转到华大HC32F460的,第一次配置串口通信,尤其是想用DMA来发送、中断来接收,大概率会跟我当初一样,感觉有点“水土不服”。明明在STM32上几行代码就搞定…

2026/7/3 5:31:22 阅读更多 →

最新新闻

Mermaid Live Editor:5分钟学会专业图表制作的终极免费工具

Mermaid Live Editor:5分钟学会专业图表制作的终极免费工具

Mermaid Live Editor:5分钟学会专业图表制作的终极免费工具 【免费下载链接】mermaid-live-editor Edit, preview and share mermaid charts/diagrams. New implementation of the live editor. 项目地址: https://gitcode.com/GitHub_Trending/me/mermaid-live-e…

2026/7/4 9:21:33 阅读更多 →
kkFileView企业级集成方案:构建高效文档预览中台的三大价值支柱

kkFileView企业级集成方案:构建高效文档预览中台的三大价值支柱

kkFileView企业级集成方案:构建高效文档预览中台的三大价值支柱 【免费下载链接】kkFileView Universal File Online Preview Project based on Spring-Boot 项目地址: https://gitcode.com/GitHub_Trending/kk/kkFileView 在数字化转型浪潮中,文…

2026/7/4 9:19:32 阅读更多 →
Linux服务器Java应用AES-256加密报错:JCE策略限制与BouncyCastle解决方案

Linux服务器Java应用AES-256加密报错:JCE策略限制与BouncyCastle解决方案

1. 项目概述:当AES256在Linux服务器上“罢工” 在Java后端开发或者运维的日常里,加密解密是家常便饭,尤其是AES这种对称加密算法,应用场景从接口参数加密到数据库字段脱敏,无处不在。在本地Windows或Mac的开发环境下&…

2026/7/4 9:19:32 阅读更多 →
如何用Qwen-Image-Edit-Rapid-AIO实现4步极速AI图像编辑:从新手到专家的完整实战指南

如何用Qwen-Image-Edit-Rapid-AIO实现4步极速AI图像编辑:从新手到专家的完整实战指南

如何用Qwen-Image-Edit-Rapid-AIO实现4步极速AI图像编辑:从新手到专家的完整实战指南 【免费下载链接】Qwen-Image-Edit-Rapid-AIO 项目地址: https://ai.gitcode.com/hf_mirrors/Phr00t/Qwen-Image-Edit-Rapid-AIO 你是否曾经因为复杂的AI图像编辑流程而望…

2026/7/4 9:17:32 阅读更多 →
15分钟极速部署:TrueNAS Scale上搭建高性能Minecraft Forge服务器全指南

15分钟极速部署:TrueNAS Scale上搭建高性能Minecraft Forge服务器全指南

15分钟极速部署:TrueNAS Scale上搭建高性能Minecraft Forge服务器全指南 【免费下载链接】docker-minecraft-server Docker image that provides a Minecraft Server for Java Edition that automatically installs/upgrades versions, modloaders, modpacks and mo…

2026/7/4 9:17:32 阅读更多 →
硬盘空间告急?这只“羊驼骑士“能帮你快速清理重复文件

硬盘空间告急?这只“羊驼骑士“能帮你快速清理重复文件

硬盘空间告急?这只"羊驼骑士"能帮你快速清理重复文件 【免费下载链接】czkawka Multi functional app to find duplicates, empty folders, similar images etc. 项目地址: https://gitcode.com/GitHub_Trending/cz/czkawka 你的电脑硬盘是不是经常…

2026/7/4 9:15:31 阅读更多 →

日新闻

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 正式发布,这是一个关键的安全修复版本,修复了多个方面的问题,还对部分功能进行了优化。 安全修复亮点 此次发布在安全修复上表现突出。binprot 避免了项目引用计数溢出,mcmc 因安全问题提升了上游版本号&#xf…

2026/7/4 0:04:29 阅读更多 →
终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案 【免费下载链接】HMCL A Minecraft Launcher which is multi-functional, cross-platform and popular 项目地址: https://gitcode.com/gh_mirrors/hm/HMCL HMCL(Hello Minecraft! Lau…

2026/7/4 0:06:29 阅读更多 →
KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

1. KMX63与PIC18F66K40的硬件协同架构解析KMX63作为一款三轴加速度计和磁力计组合传感器,与PIC18F66K40微控制器的搭配堪称嵌入式HMI开发的黄金组合。这套硬件组合的核心优势在于KMX63提供的高精度运动感知能力与PIC18F66K40强大的信号处理能力形成了完美互补。KMX6…

2026/7/4 0:06:29 阅读更多 →

周新闻

月新闻