代码测试环境

Centos 6.10 64位
go version: go1.11

概述

执行系统命令对程序而言是一个重要的操作,
因为有时我们需要调用系统中现有的命令来完成任务, 比如调用ffmpeg来对视频裁剪, 转码等.

像常见的, PHP中的system()函数, C语言中的system()函数、exec函数族等,
Nodejs中的child_process.exec()方法…, 这些在相应编程语言中都是比较常用的.

那么go语言也有相应的模块支持调用系统命令, 主要就是exec.Command()

实例

下面就以我认为最常见的使用场景举例说明

查找命令绝对路径

cmdPath, _ := exec.LookPath("ls")
fmt.Printf("cmdPath=%s\n", cmdPath)

执行命令

执行ls -l

cmd := exec.Command("ls", "-l")
cmd.Stdout = os.Stdout
// Run 和 Start只能用一个
// Run starts the specified command and waits for it to complete.
_ = cmd.Run()// Start starts the specified command but does not wait for it to complete.
// _ = cmd.Start()
// _ = cmd.Wait()

注意Run和Start()方法只能用一个, Run方法是同步的, 会在命令执行完后才返回;
Start()方法是异步的, 会立即返回, 可以调用Wait()方法"等待"命令执行完成.

使用管道连接多个命令

执行: ps -ef | grep -i ssh

ps := exec.Command("ps", "-ef")
grep := exec.Command("grep", "-i", "ssh")r, w := io.Pipe() // 创建一个管道
defer r.Close()
defer w.Close()
ps.Stdout = w // ps向管道的一端写
grep.Stdin = r // grep从管道的一端读var buffer bytes.Buffer
grep.Stdout = &buffer // grep的输出为buffer_ = ps.Start()
_ = grep.Start()
ps.Wait()
w.Close()
grep.Wait()
io.Copy(os.Stdout, &buffer) // buffer拷贝到系统标准输出

完整的测试代码参见:
https://github.com/GerryLon/learn-go/blob/master/lang/cmd/main.go

上述代码执行可能的输出为:

[root@mycentos cmd]# go run main.go
cmdPath=/bin/lstotal 4
-rwxr-xr-x. 1 root root 854 Jan 22  2019 main.goroot      1164     1  0 16:08 ?        00:00:00 /usr/sbin/sshd
root      3836  3830  0 17:45 pts/0    00:00:00 grep -i ssh

欢迎补充指正!

golang执行系统命令相关推荐

  1. php脚本函数,PHP执行系统命令函数实例讲解

    命令注入 命令注入(Command Injection),对一些函数的参数没有做过滤或过滤不严导致的,可以执行系统或者应用指令(CMD命令或者 bash 命令)的一种注入攻击手段. 常见的执行系统命令 ...

  2. nodejs在cmd中运行js_如何在nodejs里调用执行系统命令

    每种语言都有自己的优势,互相结合起来各取所长程序执行起来效率更高或者说哪种实现方式较简单就用哪个,nodejs是利用子进程来调用系统命令或者文件,文档见nodejs.org/api/child_pro ...

  3. golang 执行命令 设置超时

    目录 0x00 前言 0x01 首先跑一个 os/exec 0x02 os/exec 黑魔法 0x03 Channel & Goroutine Channel Goroutine 一些问题 0 ...

  4. python3 执行系统命令

    目录 os.system os.popen commands subprocess os.system 这是通过调用标准C函数system()命令实现的,并且具有相同的限制条件. 在Unix平台上, ...

  5. php 执行系统命令函数

    目录 命令注入 system()函数 passthru()函数 exec() shell_exec()函数 反引号 ` popen()函数 pcntl_exec()函数 命令注入 命令注入(Comma ...

  6. golang执行linux命令

    golang执行linux命令代码,用过好用 func Shellout(command string) (error, string, string) {var stdout bytes.Buffe ...

  7. 安装python 的包控制mysql的Python脚本与执行系统命令的Python脚本

    安装python 的包 python 有很多的第三方软件包, 提供了 标准库中没有的功能. python 的官方支持的软件包的网站: PyPI · The Python Package Index 安 ...

  8. python执行系统命令的方法

    做为系统工程师来说,经常会用到python脚本去调用一下系统命令,现把经常使用的集中调用方法总结如下: 一,os.system(command) 在一个子shell中运行command命令,并返回co ...

  9. python执行系统命令后获取返回值的几种方式集合

    第一种情况 os.system('ps aux') 执行系统命令,没有返回值 第二种情况 result = os.popen('ps aux') res = result.read() for lin ...

最新文章

  1. php null运算符,PHP7 Null合并运算符
  2. SAP MM 物料成本价格修改历史的查询
  3. android——ImageLoader添加缓存
  4. vs2022 qt环境搭建调试
  5. Sublime Text插件的离线安装-使用htmlprettify美化您的HTML代码 1
  6. C++ 11 在 Qt 5 中的应用
  7. 【动态规划】cf1034C. Region Separation
  8. javaserver_集成Spring和JavaServer Faces:改进的模板
  9. ASP.NET MVC 在WebService中Token的使用方法
  10. ASP.NET Core与Dapper和VS 2017使用JWT身份验证WEB API并在Angular2客户端应用程序中使用它
  11. Linux下hba卡驱动的卸载,SLES11下如何重装qlogic FC HBA卡驱动
  12. 爱普生xp245手动清零_仍在Windows XP上吗? 手动更新或感到烦恼
  13. Device Tree(五)移植DM9000,并挂载NFS
  14. Uni-app实现表格数据自动滚动(无限滚动)
  15. centos lvm卷组删卷和扩容
  16. 【开发】后端框架——SpringBoot
  17. Win11如何隐藏输入法悬浮窗?Win11隐藏输入法悬浮窗的方法
  18. 计算字符串长度.length()和数组长度.length的区别
  19. Go 每日一库之 testify
  20. 百度地图java计算2个坐标建距离_Java开发之百度地图2 :计算两地之间的距离

热门文章

  1. 老唐手把手教你配置security,并增加JWT校验(copy就用)。
  2. 《温州传奇》01--温州企业要不要信息化 驴唇也能对上马嘴
  3. 元素周期表读起来方便
  4. 学习数据库开发的建议和忠告
  5. 利用Simulink、STM32CUBEMX、STM32-MAT/TARGET自动生成简单的led灯闪烁代码(保姆级教程)
  6. P3338 [ZJOI2014]力 —— FFT
  7. 布线工程师谈PCB设计
  8. wif检测到DNS服务器未响应,hiwifi(极路由)恢复出厂的设置方法
  9. 小程序去除默认边框和文本框样式
  10. sonar添加(集成)阿里java代码p3c规则