📚 开源资源分享——颜佐光的个人书架
✉️ 联系站长
书架 / go / 语法

golang cmd命令执行

2020-08-09 11:29 · 约 2,128 字 · 浏览 3,844 次 · 更新 2020-08-09 13:06语法

golang cmd命令执行

1. 执行命令并获取执行结果

package main

import (
    "fmt"
    "os/exec"
)

func main() {
    // 通过exec.Command函数执行命令或者shell
    // 第一个参数是命令路径,当然如果PATH路径可以搜索到命令,可以不用输入完整的路径
    // 第二到第N个参数是命令的参数
    // 下面语句等价于执行命令: ls -l /var/
    cmd := exec.Command("/bin/ls", "-l", "/var/")
    // 执行命令,并返回结果
    output,err := cmd.Output()
    if err != nil {
        panic(err)
    }
    // 因为结果是字节数组,需要转换成string
    fmt.Println(string(output))

}

2. 执行命令不返回结果

package main

import (
    "os/exec"
)

func main() {
    cmd := exec.Command("/bin/ls", "-l", "/var/")
    // 执行命令,返回命令是否执行成功
    err := cmd.Run()

    if err != nil {
        // 命令执行失败
        panic(err)
    }
    // 等待执行完成
    cmd.Wait()
}

go语言调用cmd

package main

import (
    "fmt"
    "os/exec"
)

func main() {
    //删除C:\Users\Administrator\Desktop目录下的index.html文件
    c := exec.Command("cmd", "/C", "del", "C:\\Users\\Administrator\\Desktop\\index.html")
    if err := c.Run(); err != nil {
        fmt.Println("Error: ", err)
    }
}

GO语言--执行命令行

1. 使用Command生成Cmd结构体

cmd := exec.Command("ls", "-l")

2. 执行命令

两种方式

1. func (*Cmd) Run

执行命令并等待命令执行结束

func main() {
    cmd := exec.Command("tr","a-z","A-Z")
    cmd.Stdin = strings.NewReader("abcdefg")
    var out bytes.Buffer
    cmd.Stdout = &out
    err := cmd.Run()
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(out.String())

2. func (*Cmd) Start

执行命令但不等待执行结果
使用wait 等待执行结束

func main() {
    cmd := exec.Command("sleep", "5")
    err := cmd.Start()
    if err != nil {
        log.Fatal(err)
    }
    log.Printf("Waiting for command to finish...")
    err = cmd.Wait()
    log.Printf("Command finished with error: %v", err)
}

golang exec 执行系统命令

最简单的方法:

cmd := exec.Command("/bin/sh/", "-c", "linux命令")

或复杂的, 各个参数都要单独写

cmd := exec.Command("ls", "-l", "-a")
package main

import (
    "bytes"
    "fmt"
    "os/exec"
)

func main() {
    in := bytes.NewBuffer(nil)
    cmd := exec.Command("sh")
    cmd.Stdin = in
    go func() {
        in.WriteString("echo hello world > test.txt\n")
        in.WriteString("exit\n")
    }()
    if err := cmd.Run(); err != nil {
        fmt.Println(err)
        return
    }
}
← 返回《go》目录书架 →