go中提供了os/exec
包使用Command
函数可以完成一些调用命令行的操作。因为系统的不同,调用的参数会有点些不一样。
- linux中使用使用为
exec.Command("/bin/bash","-c","ls")
- windows中使用使用为
exec.Command("cmd","/c","ls")
其他的创建执行都是一样的。
我们可以封装一个函数,输入需要执行的命令,输入返回结果
import (
"bufio"
"fmt"
"os/exec"
)
func Command(arg ...string) (result string) {
name := "/bin/bash"
c := "-c"
// 根据系统设定不同的命令name
if runtime.GOOS == "windows" {
name = "cmd"
c = "/C"
}
arg = append([]string{c}, arg...)
cmd := exec.Command(name, arg...)
//创建获取命令输出管道
stdout, err := cmd.StdoutPipe()
if err != nil {
log.Error("Error:can not obtain stdout pipe for command:%s\n", err)
return
}
//执行命令
if err := cmd.Start(); err != nil {
log.Error("Error:The command is err,", err)
return
}
//读取所有输出
bytes, err := ioutil.ReadAll(stdout)
if err != nil {
log.Error("ReadAll Stdout:", err.Error())
return
}
if err := cmd.Wait(); err != nil {
log.Error("wait:", err.Error())
return
}
result = string(bytes)
return
}
调用测试
package main
func main() {
result := Command("ls")
fmt.Println(result)
result := Command("df","-h")
fmt.Println(result)
result := Command("df -h")
fmt.Println(result)
}