Go语言执行系统命令
2017-09-17 22:45
344 查看
示例代码
获取命令行输出package main import ( "os/exec" ) func main() { cmd := exec.Command("echo", "hello") buf, _ := cmd.Output() // 错误处理略 print(string(buf)) }
后台运行
package main import ( "os/exec" ) func main() { cmd := exec.Command("sleep", "100") cmd.Start() }
分析
os/exec 包用来调用系统命令,并处理输入输出。exec.Command() 用于创建一个 exec.cmd 结构体,并将传入的参数保存到结构体中。
结构体创建完成后,可以使用 cmd.Start() 或 cmd.Run() 执行。其中,cmd.Run() 会阻塞当前进程,直到命令执行完成。而 cmd.Start() 会保持程序在后台执行,在需要获取结果时,可以调用 cmd.Wait() 来阻塞以获取结果。
cmd.Run() 的实现代码如下:
func (c *Cmd) Run() error { if err := c.Start(); err != nil { return err } return c.Wait() }
cmd.Output() 是一个工具函数,它实际上是对 cmd.Run() 的简单包装,可以自动处理 cmd.Stdout 并返回结果。也就是说,不用关心 cmd.Stdout 的设置,只需创建 cmd 并调用 cmd.Output() 获取执行结果即可。
cmd.Output() 的部分代码如下(有删减):
func (c *Cmd) Output() ([]byte, error) { var stdout bytes.Buffer c.Stdout = &stdout // ... err := c.Run() // ... return stdout.Bytes(), err }
可见,系统使用了 bytes.Buffer 来临时存放输出结果,并在方法结束时将输出结果返回。bytes.Buffer 实现了 io.Reader 和 io.Writer,此处同样可以看出go语言面向组合的设计思想。
相关文章推荐
- Go语言执行系统命令行命令的方法
- Go语言执行系统命令行命令(转)
- 通过Java语言,执行Linux命令并获得反馈数据。--适用于Android系统
- golang go 语言在 window下执行命令 获取本地ip
- Go语言远程执行ssh命令简单封装(支持带交互命令)
- 把php.exe加入系统环境变量-使用命令行可快速执行PHP命令
- Java在windows上操作系统文件与程序,执行系统命令等的技巧 .
- expect脚本同步文件,构建文件分发系统,批量远程执行命令
- c#关闭系统进程以及如何调用cmd并执行命令
- 解决linux系统不能使用方向键执行命令的问题
- PHP执行linux系统命令
- 创建go语言本地文档系统
- python执行系统命令的方法os.system()
- java执行系统命令,获取网卡物理地址
- MIPS开发板的“不二”选择——Creator Ci20单板计算机评测(芯片是君正JZ4780 ,也就是MIPS R3000,系统推荐Debian或深度,官网就有,其它语言有FreePascal和Go和Java和Python)
- PHP 执行系统外部命令 system() exec() passthru()
- PHP 执行系统外部命令 system() exec() passthru()
- 分发系统介绍expect脚本远程登录expect脚本远程执行命令 expect脚本传递参数
- R 语言可执行命令转化为字符串
- 在 运行 执行 系统 命令 服务 注册表 设备管理 等功能