猿问

获取退出代码-转到

我正在使用以下软件包:os / exec http://golang.org/pkg/os/exec/在操作系统中执行命令,但我似乎找不到获取退出代码的方法。我虽然可以阅读输出


IE。


package main


import(

    "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() )

}


绝地无双
浏览 208回答 3
3回答

繁星点点滴滴

很容易确定退出代码是否为0或其他。在第一种情况下,cmd.Wait()将返回nil(除非在设置管道时出现另一个错误)。不幸的是,在错误的情况下,没有独立于平台的方法来获取退出代码。这也是它不属于API的原因。以下代码段适用于Linux,但我尚未在其他平台上对其进行测试:package mainimport "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 文档,以了解更多:)
随时随地看视频慕课网APP

相关分类

Go
我要回答