首页 > 代码库 > os/exec

os/exec

package main

import (
	"bytes"
	"fmt"
	"io/ioutil"
	"os/exec"
)

func main() {
	//搜索可执行的二进制文件路径
	f, err := exec.LookPath("php")
	fmt.Println(f, err)

	argv := []string{"php"}
	c := exec.Command("which", argv...) //执行一个shell命令
	d, _ := c.Output()                  //将*exec.Cmd标准输出为[]byte
	fmt.Println(string(d))              //就是输出刚才命令行执行的打印输出

	c2 := exec.Command("pwd", "-L") //执行一个shell命令
	d, err = c2.CombinedOutput()    //和上面的Output一样的
	fmt.Println(string(d), err, "11111")

	c3 := exec.Command("date")
	err = c3.Run() //会执行*Cmd中的命令,并等待命令执行完成
	if err != nil {
		fmt.Println(err)
	}
	d2, _ := c3.Output() //Cmd标准输出,测试的为毛没输出
	fmt.Println(string(d2), "为毛没输出")

	cmd := exec.Command("sleep", "5") //执行等待5秒
	err = cmd.Start()                 //开始执行,不会等待命令执行完成
	fmt.Println(err, "cmd.Start()不会等待命令执行完")
	err = cmd.Wait()
	fmt.Println("cmd.Wait()会等待上面的执行完了再执行Wait之后的")

	//打印命令行的输入
	var output bytes.Buffer
	cmd2 := exec.Command("cat")
	cmd2.Stdout = &output
	stdin, _ := cmd2.StdinPipe() //连接到命令启动时标准输入的管道
	cmd2.Start()
	stdin.Write([]byte("hello world"))
	stdin.Close()
	cmd2.Wait()
	fmt.Println(string(output.Bytes()))

	//打印命令行的输出
	cmd3 := exec.Command("ls", "-ll")
	stdout, _ := cmd3.StdoutPipe()  //输出刚才命令行的打印
	cmd3.Start()                    //开始执行
	dd, _ := ioutil.ReadAll(stdout) //从管道里读取数据
	cmd.Wait()                      //等待命令执行完
	fmt.Println(string(dd))

}



os/exec