golang里可以通过[os/exec]包调用linux里的命令,然而对于linux里的管道(“|”)却不能直接使用。所以写了一个管道的接口如下。

func Pipline(cmds ...*exec.Cmd) ([]byte, []byte, error) {// At least one commandif len(cmds) < 1 {return nil, nil, nil}var output bytes.Buffervar stderr bytes.Buffervar err errormaxindex := len(cmds) - 1cmds[maxindex].Stdout = &outputcmds[maxindex].Stderr = &stderrfor i, cmd := range cmds[:maxindex] {if i == maxindex {break}cmds[i+1].Stdin, err = cmd.StdoutPipe()if err != nil {return nil, nil, err}}// Start each commandfor _, cmd := range cmds {err := cmd.Start()if err != nil {return output.Bytes(), stderr.Bytes(), err}}// Wait for each command to completefor _, cmd := range cmds {err := cmd.Wait()if err != nil {return output.Bytes(), stderr.Bytes(), err}}return output.Bytes(), stderr.Bytes(), nil
}

View Code

  接口调用方法:

    // linux comand: df | grep -w "/" | cut -d "%", -f 1df := exec.Command("df")grep := exec.Command("grep", "-w", "/")cut := exec.Command("cut", "-d", "%", "-f", "1")result, _, err := utils.Pipline(df, grep, cut)if err != nil {log.Error(err)    return}// 输出最终结果fmt.Println(string(result)) 

View Code

转载于:https://www.cnblogs.com/hezhixiong/p/4984828.html

golang+linux+pipline相关推荐

  1. golang linux安装

    go在linux下的安装: [root@localhost src]# wget https://storage.googleapis.com/golang/go1.8.1.linux-amd64.t ...

  2. golang Linux桌面程序,舍弃Electron,使用HTML5 + Golang创建桌面应用程序

    Electron软件框架,允许使用JavaScript创建桌面GUI应用程序接口,并依赖于一个绑定的Chromium + Node.js运行时在大多数Linux桌面用户中名声不是很好,因为它的资源很重 ...

  3. golang linux 串口_Golang串口编程初探

    最近,新项目中有智能硬件的需求,要通过用户的手机控制智能货柜(现在带电的都能叫智能xx了,其实就是个售卖机),串口编程一点儿也摸不着头脑,不过,还得继续 ... 本来以为这种机器一般都是Linux系统 ...

  4. Linux下golang的编译,golang Linux下编译环境搭建

    1.下载golang1.4和1.10源码(1.4以后的版本都用1.4go编译安装,所以先安装1.4) 2.解压后我的目录结构是: /opt/xxx/golang |-------gopath     ...

  5. golang linux清屏命令,如何清除Go中的终端屏幕?

    小编典典 注意: 运行命令以清除屏幕不是安全的方法.在这里也检查其他答案. 您必须为每个不同的OS定义一个清晰的方法,像这样.当用户的操作系统不受支持时,它会慌乱 package main impor ...

  6. golang中文文档_Golang开发环境搭建

    Go 语言开发包 国外:https://golang.org/dl/ 国内(推荐): https://golang.google.cn/dl/ 编辑器 Golang:https://www.jetbr ...

  7. Linux部署IPFS(分布式存储系统)私有网络

    Linux部署IPFS(分布式存储系统)私有网络 简介: 星际文件系统是一个旨在创建持久且分布式存储和共享文件的网络传输协议.它是一种内容可寻址的对等超媒体分发协议.在IPFS网络中的节点将构成一个分 ...

  8. Linux下sql_labs第七关,SQL注入之Sqli-labs系列第二十七关(过滤空格、注释符、union select)和第二十七A...

    开始挑战第二十七关(Trick with SELECT & UNION) 第二十七A关(Trick with SELECT & UNION) 0x1看看源代码 (1)与26关一样,这次 ...

  9. 盘点这些年被黑的最惨的语言

    全世界只有3.14 % 的人关注了 爆炸吧知识 这些年,被黑过的语言数不胜数, 最惨的要数HTML, 但CSS.Python等也惨遭黑手 比惨? 这就来一波. HTML HTML C语言 C语言 Ja ...

  10. 李迟2022年2月知识总结

    本文为 2022 年 2 月知识总结. 研发编码 Golang Linux linux 系统可用 nc 命令来模拟 Socket 服务端和客户端.已在工作中应用到. 在后台执行valgrind时,可用 ...

最新文章

  1. 主席树 ---- LCA(树上第k大)Count on a tree
  2. 关于同步加载与异步加载的区别
  3. golang gorm 基本使用
  4. EF 关系规则(一对一、一对多、多对多...)
  5. ViewGroup之getScrollX()
  6. [转载] 一致性哈希
  7. [翻译]现代java开发指南 第一部分
  8. GlusterFS分布式存储
  9. listview 中内容覆盖了屏幕底部的工具栏的解决办法
  10. SQL 存储过程封装代码生成器
  11. paip.网站上传服务里需要做的操作流程V2012.10.2
  12. cad转dxf格式文件太大_DWG格式怎么转换成DXF格式?实测好用的转换工具都在这了...
  13. Qt信号与槽机制详解
  14. 心理学推荐书籍——《色眼识人》
  15. Hexo个人博客的安装与配置
  16. 时域分析特征参数的计算代码(Matlab和Qt两种)
  17. php校花评比排名,2018大学校花排名出炉,清华高冷,人大“小郑爽”,你pick谁?...
  18. Kryo 缓冲区溢出
  19. 高频电源模块FB230D10NZ-D浮充模块充电机
  20. 获取qq音乐外链方法+源码

热门文章

  1. 微信开发的时候自定义菜单
  2. uitableview有个属性值 separatorStyle 可用来去掉cell间的白线:
  3. 学好 Python 的 11 个优秀资源【转载】
  4. java的关闭钩子(Shutdown Hook)
  5. java Web常用过滤器
  6. js中定义变量加var与不加var的区别?
  7. TPL中的task并不是thread
  8. 【转】前端开发中的MCRV模式
  9. Delphi 7序列号过期的解决方法
  10. C#中的Boolean类型