当前位置: 首页 > news >正文

【Golang】exec.command命令日志输出示例

背景

为了输出执行命令的日志,主要是执行时间很长,而且分批输出日志的命令。

代码

func Execute(){command := exec.Command("执行命令")// 隐藏黑色窗口command.SysProcAttr = &syscall.SysProcAttr{CreationFlags: 0x08000000}// 输出日志OutputLog(command)
}func outputLog(cmd *exec.Cmd) string {cmd.Stdin = os.Stdinvar wg sync.WaitGroupwg.Add(2)//捕获标准输出stdout, err := cmd.StdoutPipe()if err != nil {log.Error("INFO:", err)os.Exit(1)}readOut := bufio.NewReader(stdout)go func() {defer wg.Done()getOutput(readOut)}()//捕获标准错误stderr, err := cmd.StderrPipe()if err != nil {log.Error("ERROR:", err)os.Exit(1)}readErr := bufio.NewReader(stderr)go func() {defer wg.Done()getOutput(readErr)}()//执行命令err = cmd.Run()if err != nil {return ""}wg.Wait()
}func getOutput(reader *bufio.Reader) string {outputBytes := make([]byte, 200)for {n, err := reader.Read(outputBytes)if err != nil {if err == io.EOF {break}//输出屏幕内容log.Error(err)}output := string(outputBytes[:n])//输出屏幕内容log.Info(output)}
}

相关文章:

  • Linux常见面试题汇总
  • Java学习七、类和对象
  • AJAX-URL查询参数
  • 【机器学习】基于K-近邻的车牌号识别
  • spring boot bean的生命周期
  • 【高质量精品】2024美赛B题22页word版高质量半成品论文+多版保奖思路+数据+前四问思路代码等(后续会更新)
  • 杨中科 ASP.NETCORE 高级14 SignalR
  • Python循环语句——while循环的嵌套应用
  • 《Python 网络爬虫简易速速上手小册》第8章:分布式爬虫设计(2024 最新版)
  • Architecture Lab:Part C【流水线通用原理/Y86-64的流水线实现/实现IIADDQ指令】
  • 搭建游戏应该选择什么样的服务器?
  • C++类与对象(下)
  • JSR303参数校验-SpringMVC
  • Docker下安装GitLab
  • jmeter-02切换中文,改为白色背景
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • 0x05 Python数据分析,Anaconda八斩刀
  • 77. Combinations
  • Asm.js的简单介绍
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • Java|序列化异常StreamCorruptedException的解决方法
  • Java小白进阶笔记(3)-初级面向对象
  • laravel with 查询列表限制条数
  • leetcode386. Lexicographical Numbers
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • 阿里研究院入选中国企业智库系统影响力榜
  • 产品三维模型在线预览
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 分类模型——Logistics Regression
  • 和 || 运算
  • 近期前端发展计划
  • 微信小程序开发问题汇总
  • 小程序01:wepy框架整合iview webapp UI
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • ​iOS安全加固方法及实现
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • $.ajax()方法详解
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (bean配置类的注解开发)学习Spring的第十三天
  • (js)循环条件满足时终止循环
  • (层次遍历)104. 二叉树的最大深度
  • (二)换源+apt-get基础配置+搜狗拼音
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (附源码)计算机毕业设计SSM保险客户管理系统
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (原)本想说脏话,奈何已放下
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • (转)Oracle存储过程编写经验和优化措施
  • (转载)Linux网络编程入门
  • .net 8 发布了,试下微软最近强推的MAUI
  • .NET Core 2.1路线图
  • .NET Core 版本不支持的问题