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)
}

 
             
           
                         
             
            
评论区