为了账号安全,请及时绑定邮箱和手机立即绑定

获取退出代码-转到

获取退出代码-转到

Go
绝地无双 2021-04-30 18:16:33
我正在使用以下软件包:os / exec http://golang.org/pkg/os/exec/在操作系统中执行命令,但我似乎找不到获取退出代码的方法。我虽然可以阅读输出IE。package mainimport(    "os/exec"    "bytes"    "fmt"    "log"    )func main() {    cmd := exec.Command("somecommand", "parameter")    var out bytes.Buffer    cmd.Stdout = &out    if err := cmd.Run() ; err != nil {        //log.Fatal( cmd.ProcessState.Success() )        log.Fatal( err )    }    fmt.Printf("%q\n", out.String() )}
查看完整描述

3 回答

?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

很容易确定退出代码是否为0或其他。在第一种情况下,cmd.Wait()将返回nil(除非在设置管道时出现另一个错误)。


不幸的是,在错误的情况下,没有独立于平台的方法来获取退出代码。这也是它不属于API的原因。以下代码段适用于Linux,但我尚未在其他平台上对其进行测试:


package main


import "os/exec"

import "log"

import "syscall"


func main() {

    cmd := exec.Command("git", "blub")


    if err := cmd.Start(); err != nil {

        log.Fatalf("cmd.Start: %v", err)

    }


    if err := cmd.Wait(); err != nil {

        if exiterr, ok := err.(*exec.ExitError); ok {

            // The program has exited with an exit code != 0


            // This works on both Unix and Windows. Although package

            // syscall is generally platform dependent, WaitStatus is

            // defined for both Unix and Windows and in both cases has

            // an ExitStatus() method with the same signature.

            if status, ok := exiterr.Sys().(syscall.WaitStatus); ok {

                log.Printf("Exit Status: %d", status.ExitStatus())

            }

        } else {

            log.Fatalf("cmd.Wait: %v", err)

        }

    }

}

只要遵循 的 API 文档,以了解更多:)


查看完整回答
反对 回复 2021-05-10
  • 3 回答
  • 0 关注
  • 207 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信