golang实行命令的包:os/exec
查找命令的绝对路径
cmdPath , err := exec.LookPath(\公众ls\"大众)if err !=nil{fmt.Println(err)}fmt.Println(cmdPath)创建命令工具
func Commandfunc Command(name string, arg ...string) Cmd
函数返回一个Cmd,用于利用给出的参数实行name指定的程序。返回值只设定了Path和Args两个参数。
如果name不含路径分隔符,将利用LookPath获取完全路径;否则直策应用name。参数arg不应包含命令名。

cmdPath , err := exec.LookPath(\公众ls\公众)if err !=nil{pacnic(err)}command := exec.Command(cmdPath,\"大众-l\"大众)
实行命令go供应了好几个函数运行命令
func (c Cmd) Run() error
Run实行c包含的命令,并壅塞直到完成。
如果命令成功实行,stdin、stdout、stderr的转交没有问题,并且返回状态码为0,方法的返回值为nil;如果命令没有实行或者实行失落败,会返回ExitError类型的缺点;否则返回的error可能是表示I/O问题。
func (c Cmd) Start() error
Start开始实行c包含的命令,但并不会等待该命令完成即返回。Wait方法会返回命令的返回状态码并在命令返回后开释干系的资源。
func (c Cmd) Wait() error
Wait会壅塞直到该命令实行完成,该命令必须是被Start方法开始实行的。
如果命令成功实行,stdin、stdout、stderr的转交没有问题,并且返回状态码为0,方法的返回值为nil;如果命令没有实行或者实行失落败,会返回ExitError类型的缺点;否则返回的error可能是表示I/O问题。Wait方法会在命令返回后开释干系的资源。
func (c Cmd) Output() ([]byte, error)
实行命令并返回标准输出的切片。
func (c Cmd) CombinedOutput() ([]byte, error)
实行命令并返回标准输出和缺点输出合并的切片。
只是实行命令,不须要读取输出,用Start或者Run,然后判断err即可; 由于Start是没有等待的,以是须要利用Wait去等。
如果须要获取输出,及可以用OutPut或者CombinedOutput。
例如:
cmdPath , err := exec.LookPath(\"大众ls\"大众)if err !=nil{panic(err)}command := exec.Command(cmdPath,\公众-l\公众)result , err := command.CombinedOutput()if err !=nil{ fmt.Println(\"大众命令实行失落败:\"大众+err.Error())}fmt.Println(string(result))
利用管道实行命令package mainimport (\"大众bytes\"大众\公众fmt\"大众\"大众io\"大众\公众os\"大众\公众os/exec\"大众)func main() {ps := exec.Command(\公众ps\公众, \"大众aux\"大众)grep := exec.Command(\"大众grep\"大众, \"大众-i\"大众, \"大众chrome\"大众)// 创建一个管道r, w := io.Pipe()defer r.Close()defer w.Close()// ps向管道的一端写ps.Stdout = w// grep从管道的一端读grep.Stdin = rvar buffer bytes.Buffer// grep的输出为buffergrep.Stdout = &buffer_ = ps.Start()_ = grep.Start()ps.Wait()w.Close()grep.Wait()io.Copy(os.Stdout, &buffer)fmt.Println(buffer.String())}