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)) }
时间: 2024-11-06 03:40:40