美文网首页Golang
介绍 golang执行系统命令

介绍 golang执行系统命令

作者: 易霂 | 来源:发表于2018-10-28 01:13 被阅读0次

    golang下的os/exec包执行外部命令,它将os.StartProcess进行包装使得它更容易映射到stdin和stdout。这点和python下的command、os.system等功能是一样的。这里列两个具体操作的代码。其可以调用类LINUX系统下的shell命令,也可以在windows下调用cmd下的命令。

    代码一

    package main
    import (
    "bytes"
    "fmt"
    "log"
    "os/exec"
    )
    const ShellToUse = "bash"
    func Shellout(command string) (error, string, string) {
    var stdout bytes.Buffer
    var stderr bytes.Buffer
    cmd := exec.Command(ShellToUse, "-c", command)
    cmd.Stdout = &stdout
    cmd.Stderr = &stderr
    err := cmd.Run()
    return err, stdout.String(), stderr.String()
    }
    func main() {
    err, out, errout := Shellout("ls -ltr")
    if err != nil {
    log.Printf("error: %v\n", err)
    }
    fmt.Println("--- stdout ---")
    fmt.Println(out)
    fmt.Println("--- stderr ---")
    fmt.Println(errout)
    }
    

    以上代码执行后,效果如下:

    [root@361way go] go run cmd.go
    --- stdout ---
    total 24
    drwxr-xr-x 6 root root 79 Jun 13 2017 src
    -rw-r--r-- 1 root root 752 Aug 19 10:55 login.go
    -rw-r--r-- 1 root root 1189 Aug 19 14:29 log.go
    -rw-r--r-- 1 root root 623 Aug 19 16:43 cmd.go
    -rw-r--r-- 1 root root 538 Aug 19 17:41 cmd2.go
    -rw-r--r-- 1 root root 519 Aug 19 21:38 http.go
    -rw-r--r-- 1 root root 462 Aug 19 22:29 test.py
    --- stderr ---
    

    代码二

    package main
    import (
    "fmt"
    "os/exec"
    )
    func Cmd(cmd string, shell bool) []byte {
    if shell {
    out, err := exec.Command("bash", "-c", cmd).Output()
    if err != nil {
    panic("some error found")
    }
    return out
    } else {
    out, err := exec.Command(cmd).Output()
    if err != nil {
    panic("some error found")
    }
    return out
    }
    }
    func main() {
    //cmd := "ls -al"
    cmd := "python test.py"
    //cmd := "python -V" //没有输出
    //cmd := "env"
    out := string(Cmd(cmd,true))
    //out := string(Cmd(cmd,false))
    fmt.Println(out)
    }
    

    因为都是调用的exec.Command方法并调用bash shell,本质上并没有什么区别。其也可以正常调用python脚本,但在直接调用python -V命令时没有输出,这点感觉很奇怪。

    相关文章

      网友评论

        本文标题:介绍 golang执行系统命令

        本文链接:https://www.haomeiwen.com/subject/dabutqtx.html