首页 > 后端开发 > Golang > 如何从 Go 中的 os/exec 中检索退出代码?

如何从 Go 中的 os/exec 中检索退出代码?

Barbara Streisand
发布: 2024-12-23 10:37:58
原创
484 人浏览过

How to Retrieve the Exit Code from `os/exec` in Go?

如何在 Go 中获取退出代码

使用 os/exec 包执行命令时,可能会遇到获取退出代码的常见问题。虽然文档提供了 Process.Success() 方法来指示进程是否正常退出,但它没有提供检索实际退出代码的显式方法。

获取 Linux 退出代码的一种解决方法-基于系统的方法是利用 syscall 包。下面是一个改进的代码片段:

package main

import (
    "log"
    "os/exec"
    "syscall"
)

func main() {
    cmd := exec.Command("somecommand", "parameter")
    if err := cmd.Run(); err != nil {
        if exiterr, ok := err.(*exec.ExitError); ok {
            // exiterr.Sys() is a syscall.WaitStatus.
            log.Printf("Exit Status: %d", exiterr.Sys().(syscall.WaitStatus).ExitStatus())
        } else {
            log.Fatalf("cmd.Run: %v", err)
        }
    }
}
登录后复制

此方法使用 syscall 包中的 WaitStatus 类型,其中包含 ExitStatus() 方法来检索在 Linux 和其他类 UNIX 操作系统上运行的进程的退出代码.

对于 Windows 系统,此方法不起作用,因为它不提供相同的退出代码概念。相反,您可以选择其他方法,例如使用 cmd.exe 的 /c 选项来执行命令并解析输出中的错误代码。

通过根据您的操作系统调整这些技术,您可以有效地检索通过 Go 中的 os/exec 包执行的外部命令的退出代码。

以上是如何从 Go 中的 os/exec 中检索退出代码?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板