golang 执行linux命令 &获取命令执行返回码,命令pid,执行结果(逐行输出) - Go语言中文社区

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

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/YMY_mine/article/details/101068865
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-02-02 19:42:29
  • 阅读 ( 2408 )
  • 分类:Go

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢