Go执行命令行操作

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

0%