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

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值