golang 执行linux命令 &获取命令执行返回码,命令pid,执行结果(逐行输出)

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"os/exec"
	"syscall"
)

func main() {

	cmd := exec.Command("/bin/bash", "-c", "ls -l")  //不加第一个第二个参数会报错

    //cmd.Stdout = os.Stdout // cmd.Stdout -> stdout  重定向到标准输出,逐行实时打印
	//cmd.Stderr = os.Stderr // cmd.Stderr -> stderr
    //也可以重定向文件 cmd.Stderr= fd (文件打开的描述符即可)

	stdout, _ := cmd.StdoutPipe()   //创建输出管道
	defer stdout.Close()
	if err := cmd.Start(); err != nil {
		log.Fatalf("cmd.Start: %v")
	}

	fmt.Println(cmd.Args) //查看当前执行命令

	cmdPid := cmd.Process.Pid //查看命令pid
	fmt.Println(cmdPid)

	result, _ := ioutil.ReadAll(stdout) // 读取输出结果
	resdata := string(result)
	fmt.Println(resdata)

	var res int
	if err := cmd.Wait(); err != nil {
		if ex, ok := err.(*exec.ExitError); ok {
			fmt.Println("cmd exit status")
			res = ex.Sys().(syscall.WaitStatus).ExitStatus() //获取命令执行返回状态,相当于shell: echo $?
		}
	}

	fmt.Println(res)
}

执行结果:

获取命令执行返回码:https://stackoverflow.com/questions/10385551/get-exit-code-go

发布了70 篇原创文章 · 获赞 11 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/YMY_mine/article/details/101068865
今日推荐