golang cmd命令执行

/ go / 没有评论 / 3076浏览

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