os/exec 包提供了执行linux命令的相关接口,主要有如下:
//这个函数主要是用来查询可执行二进制文件的路径
func LookPath(file string) (string, error)
//这个函数主要是用来初始化一个Cmd指针,Path和Args按参数初始化,其他字段执行默认初始化
//初始化后的Cmd用于后续执行run,start等函数
func Command(name string, arg ...string) *Cmd
//这个函数主要是执行*Cmd中的命令,把执行结果和错误合并到byte数组中
func (c *Cmd) CombinedOutput() ([]byte, error)
//这个函数主要是执行*Cmd中的命令,返回执行结果,不包含错误信息
func (c *Cmd) Output() ([]byte, error)
//这个函数主要是执行*Cmd中的命令,并且会等待命令执行完成,如果命令执行不成功,则返回错误信息
func (c *Cmd) Run() error
//这个函数主要是执行*Cmd中的命令,只是让命令开始执行,并不会等待命令执行完。
func (c *Cmd) Start() error
//这个函数主要是用于连接到命令启动时错误标准输出的管道,命令结束时,管道会自动关闭
//这里记得要保证在cmd命令结束前来读取内容,不然会读不到(一般结合Start与Wait来保证)
func (c *Cmd) StderrPipe() (io.ReadCloser, error)
//这个函数主要是用于连接到命令启动时标准输入的管道
func (c *Cmd) StdinPipe() (io.WriteCloser, error)
//这个函数主要是用于连接到命令启动时标准输出的管道,命令结束时,管道会自动关闭
func (c *Cmd) StdoutPipe() (io.ReadCloser, error)
//这个函数主要是等待*Cmd中的已开始执行的命令执行完成
func (c *Cmd) Wait() error
//这个函数主要是输出命令执行失败的错误信息
func (e *Error) Error() string
//这个函数主要是返回一个执行不成功命令的信息
func (e *ExitError) Error() string
//类似于Command,但是多了一个Context
//如果命令没有完成,但是context完成了,则可以终止命令的继续执行
func CommandContext(ctx context.Context, name string, arg ...string) *Cmd
具体示例
LookPath()函数
package main
import (
"bytes"
"context"
"errors"
"fmt"
"io/ioutil"
"os/exec"
"time"
)
//LookPath 实例
//执行结果:
//ps is at path: /bin/ps
func