package main
import (
"bytes"
"fmt"
"os/exec"
)
func SetCmdStd(cmd *exec.Cmd) (stdOut, stdErr *bytes.Buffer) {
stdOut = &bytes.Buffer{}
stdErr = &bytes.Buffer{}
cmd.Stdout = stdOut
cmd.Stderr = stdErr
return
}
func main() {
catCmt := exec.Command("cat", "readme.md")
catOut, catErr := SetCmdStd(catCmt)
catRunErr := catCmt.Run()
if catRunErr != nil {
fmt.Println("cat run err", catRunErr, catErr)
}
fmt.Println(catOut)
// ls -l 要先写命令,然后写-l参数
lsCmd := exec.Command("ls", "-l")
lsStdOut, lsStdErr := SetCmdStd(lsCmd)
err := lsCmd.Run()
if err != nil {
fmt.Println("命令运行出错", err, lsStdErr)
return
}
fmt.Println("命令执行成功:", lsStdOut)
//带管道 | 的命令不能直接执行,要分步骤执行
// ps -ef|grep -i php|wc -l 要先写命令,然后写-l参数
ps := exec.Command("ps", "-ef")
psOut, psErr := SetCmdStd(ps)
err = ps.Run()
if err != nil {
fmt.Println("执行错误", err.Error(), psErr.String())
return
}
//执行grep操作,grep上面的执行结果
grep := exec.Command("grep", "php")
grep.Stdin = psOut //把上面执行的结果放到grep的输入
grepStdout, grepStderr := SetCmdStd(grep)
err = grep.Run()
if err != nil {
fmt.Println("命令grep出错", err, grepStderr.String())
}
fmt.Println("命令执行成功,结果1", grepStdout)
wc := exec.Command("wc", "-l")
wc.Stdin = grepStdout
wcOut, _ := SetCmdStd(wc)
err = wc.Run()
if err != nil {
fmt.Println("wc执行错误", err)
return
}
fmt.Println("wc执行成功", wcOut)
// /Users/denny/spider/software/Darwin_ffmpeg --help
mpeg := exec.Command("/Users/denny/spider/software/Darwin_ffmpeg", "--help")
mpOut, mpErr := SetCmdStd(mpeg)
err = mpeg.Run()
if err != nil {
fmt.Println("ffmpeg", err, mpErr)
}
fmt.Println(mpOut)
}
02-04
03-10
1318