首页 > 其他分享 >golang自定义 os.stderr 数据读取逻辑

golang自定义 os.stderr 数据读取逻辑

时间:2023-08-08 21:46:26浏览次数:46  
标签:trivy return 自定义 err nil os db golang data

原始需求

只是一个很简单的需求, 使用golang的exec运行一个命令然后获取实时结果, 命令是

trivy image --download-db-only

正常的打印应该是

2023-08-08T17:06:02.929+0800    INFO    Need to update DB
2023-08-08T17:06:02.929+0800    INFO    DB Repository: ghcr.io/aquasecurity/trivy-db
2023-08-08T17:06:02.929+0800    INFO    Downloading DB...
867.62 KiB / 38.79 MiB [->_____________________________________________________________________] 2.18% 804.52 KiB p/s ETA 48s

然后最下面是个进度条, 随着时间会慢慢的加满, 最后是到100结束

2023-08-08T17:36:33.103+0800    INFO    Need to update DB
2023-08-08T17:36:33.103+0800    INFO    DB Repository: ghcr.io/aquasecurity/trivy-db
2023-08-08T17:36:33.103+0800    INFO    Downloading DB...
38.79 MiB / 38.79 MiB [--------------------------------------------------------------------------] 100.00% 835.73 KiB p/s 48s

然后我就使用普通的 exec.Command 运行并监听其 stderr 和 stdout 通道, 结果发现进度条数据获取不到, 我将每一个数据都记录到了日志文件中, 日志文件如下:

{"level":"warn","ts":"2023-08-08T16:29:04.978+0800","caller":"trivy-db/download.go:46","msg":"命令错误输出","command":"trivy image --download-db-only ","output":"2023-08-08T16:29:04.978+0800\t\u001b[34mINFO\u001b[0m\tNeed to update DB"}

{"level":"warn","ts":"2023-08-08T16:29:04.978+0800","caller":"trivy-db/download.go:46","msg":"命令错误输出","command":"trivy image --download-db-only ","output":"2023-08-08T16:29:04.978+0800\t\u001b[34mINFO\u001b[0m\tDB Repository: ghcr.io/aquasecurity/trivy-db"}

{"level":"warn","ts":"2023-08-08T16:29:04.978+0800","caller":"trivy-db/download.go:46","msg":"命令错误输出","command":"trivy image --download-db-only ","output":"2023-08-08T16:29:04.978+0800\t\u001b[34mINFO\u001b[0m\tDownloading DB..."}

请忽略\t, [34m 这种特殊字符, 可以看到后续的进度条日志完全未捕捉到, 然后开始了找问题之旅, 因为觉得挺有意思所以把过程分享给大家

标签:trivy,return,自定义,err,nil,os,db,golang,data
From: https://www.cnblogs.com/chnmig/p/17615453.html

相关文章

  • 零基础尝试搭建docker和nacos环境
    一、安装docker    参考  https://blog.csdn.net/m0_59196543/article/details/124749175 这篇文章,感谢大佬分享  1、检查是否安装过docker,如果有,则卸载  yumremovedocker\docker-client\docker-client-latest\......
  • golang之操作kafka
     安装第三方包:gogetgithub.com/IBM/sarama 生产者实例:packagemainimport("fmt""github.com/IBM/sarama")funcmain(){//1.生产者配置config:=sarama.NewConfig()config.Producer.RequiredAcks=sarama.WaitForAll/......
  • WPF自定义TreeView滚动条样式
     根据客户需求,要在TreeView目录树上显示10万+个节点,但是目录树显示10万加节点后,整个页面操作起来非常卡,所以给目录树增加了虚拟化设置。但是虚拟化设置一直没生效,后来经过排查发现是使用的自定义滚动条导致了虚拟化设置没有生效,后来自己写了一个滚动条样式,问题解决了。目录树虚......
  • PostgreSQL数据库基本使用
    1.简介PGSQL是一个功能非常强大同时是开源的对象关系型数据库.经过二十几年的发展,PostgreSQL 是目前世界上可以获得的最先进的开放源码数据库系统。2.基本语法表是关系型数据库存储结构化数据的基本结构,可以使用CREATETABLE创建所需要的结构,其语法:CREATETABLEIFNOTEXISTS......
  • Python中文件操作的详细使用:open()、os.open()和with open()
    前言在编程语言中,文件读写是最常见的IO操作,Python内置了读写文件的函数,其中包括open()函数、os.open()函数以及withopen()语句。本文将详细介绍这三种方法的使用方式、区别和最佳实践。open()open()函数是Python内置的用于打开文件的函数,它接受一个文件路径和打开模式作为参数,并返......
  • LeetCode 16. 3Sum Closest 双指针+排序
    Givenanintegerarraynumsoflengthnandanintegertarget,findthreeintegersinnumssuchthatthesumisclosesttotarget.Returnthesumofthethreeintegers.Youmayassumethateachinputwouldhaveexactlyonesolution.Solution先将原数组排序,然......
  • ghost-on-docker、nginx-proxy-manager install
    #ghost安装dockerrun-d--nameblog-ghost-eNODE_ENV=development-edatabase__connection__filename='/var/lib/ghost/content/data/gggdb.db'-p8080:2368-v/path/to/ghost/blog:/var/lib/ghost/contentghost#nginx-proxy-manager中文安装docker-compose.yml......
  • 利用Python Flask蓝图加自定义蓝图划分优雅的目录结构
    我们在用Flask开发网站的时候。经常看到有很多人把所有的路由函数放到了入口文件,这种做法是非常不可取的,如果我们的视图函数有几百个了都写到一个文件里肯定是不行的。还有在实现中我们都在比较大型项目里面我们可能有十几个甚至几十个这种不同模型。我们需要考虑把这些模型分文别......
  • 大疆无人机红外图片提取sdk在centos下使用
    大疆无人机红外图片提取sdk再centos下使用无法编译使用,解决办法有两种(1)使用ubuntudocker镜像,导出导入到centos.(2)先再ubuntu下编译生成可执行文件,然后使用patchelf,并结合glibcallinone开源插件使用。$patchelf--set-interpreter/opt/libs/xxxx/xxx.so./yourapp$......
  • DOS命令
    1.DOS窗口,打开方式:win+R,输入Cmd2.命令(1)修改背景和字体颜色colorf0f:代表背景颜色 0:代表字体颜色(2)清屏命令cls(3)查看目录文件dir查看所有的目录文件文件之前有dir为目录文件,不存在idr为文本文件(4)查看隐藏文件dir/a(5)只查看目录dir/a:dd:只查看目录 r:只读文件 a:......