golang执行系统命令
代码测试环境
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执行系统命令相关推荐
- php脚本函数,PHP执行系统命令函数实例讲解
命令注入 命令注入(Command Injection),对一些函数的参数没有做过滤或过滤不严导致的,可以执行系统或者应用指令(CMD命令或者 bash 命令)的一种注入攻击手段. 常见的执行系统命令 ...
- nodejs在cmd中运行js_如何在nodejs里调用执行系统命令
每种语言都有自己的优势,互相结合起来各取所长程序执行起来效率更高或者说哪种实现方式较简单就用哪个,nodejs是利用子进程来调用系统命令或者文件,文档见nodejs.org/api/child_pro ...
- golang 执行命令 设置超时
目录 0x00 前言 0x01 首先跑一个 os/exec 0x02 os/exec 黑魔法 0x03 Channel & Goroutine Channel Goroutine 一些问题 0 ...
- python3 执行系统命令
目录 os.system os.popen commands subprocess os.system 这是通过调用标准C函数system()命令实现的,并且具有相同的限制条件. 在Unix平台上, ...
- php 执行系统命令函数
目录 命令注入 system()函数 passthru()函数 exec() shell_exec()函数 反引号 ` popen()函数 pcntl_exec()函数 命令注入 命令注入(Comma ...
- golang执行linux命令
golang执行linux命令代码,用过好用 func Shellout(command string) (error, string, string) {var stdout bytes.Buffe ...
- 安装python 的包控制mysql的Python脚本与执行系统命令的Python脚本
安装python 的包 python 有很多的第三方软件包, 提供了 标准库中没有的功能. python 的官方支持的软件包的网站: PyPI · The Python Package Index 安 ...
- python执行系统命令的方法
做为系统工程师来说,经常会用到python脚本去调用一下系统命令,现把经常使用的集中调用方法总结如下: 一,os.system(command) 在一个子shell中运行command命令,并返回co ...
- python执行系统命令后获取返回值的几种方式集合
第一种情况 os.system('ps aux') 执行系统命令,没有返回值 第二种情况 result = os.popen('ps aux') res = result.read() for lin ...
最新文章
- php null运算符,PHP7 Null合并运算符
- SAP MM 物料成本价格修改历史的查询
- android——ImageLoader添加缓存
- vs2022 qt环境搭建调试
- Sublime Text插件的离线安装-使用htmlprettify美化您的HTML代码 1
- C++ 11 在 Qt 5 中的应用
- 【动态规划】cf1034C. Region Separation
- javaserver_集成Spring和JavaServer Faces:改进的模板
- ASP.NET MVC 在WebService中Token的使用方法
- ASP.NET Core与Dapper和VS 2017使用JWT身份验证WEB API并在Angular2客户端应用程序中使用它
- Linux下hba卡驱动的卸载,SLES11下如何重装qlogic FC HBA卡驱动
- 爱普生xp245手动清零_仍在Windows XP上吗? 手动更新或感到烦恼
- Device Tree(五)移植DM9000,并挂载NFS
- Uni-app实现表格数据自动滚动(无限滚动)
- centos lvm卷组删卷和扩容
- 【开发】后端框架——SpringBoot
- Win11如何隐藏输入法悬浮窗?Win11隐藏输入法悬浮窗的方法
- 计算字符串长度.length()和数组长度.length的区别
- Go 每日一库之 testify
- 百度地图java计算2个坐标建距离_Java开发之百度地图2 :计算两地之间的距离