You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Lua中如何运行可执行文件并获取其返回值?

os.execute()获取程序退出值的实现方案

核心规则说明

Lua的os.execute()返回值规则随版本不同存在差异,对应处理方式如下:

1. Lua 5.1 版本处理

Lua 5.1中os.execute()仅返回单个状态值,需要区分操作系统做适配:

  • Windows平台:返回值直接对应程序的实际退出码
  • 类Unix(Linux/macOS等)平台:返回值是wait系统调用的原始状态,需要右移8位提取实际退出码
    示例代码:
local exec_result = os.execute("你的可执行文件路径")
local actual_exit_code

-- 自动判断操作系统
if package.config:sub(1,1) == "\\" then
    actual_exit_code = exec_result
else
    actual_exit_code = bit32.rshift(exec_result, 8) -- 没有bit32库也可以用math.floor(exec_result / 256)替代
end

if actual_exit_code == 0 then
    -- 执行成功逻辑
else
    -- 执行失败逻辑
end

2. Lua 5.2 及更高版本处理

Lua 5.2开始os.execute()返回三个值,直接可以拿到标准化的退出信息:
返回值顺序为:是否成功布尔值, 退出类型, 退出码

  • 退出类型为exit表示程序正常退出,第三个值就是实际退出码
  • 退出类型为signal表示程序被系统信号中断
    示例代码:
local _, exit_type, exit_code = os.execute("你的可执行文件路径")

if exit_type == "exit" then
    if exit_code == 0 then
        -- 程序执行成功
    else
        -- 程序执行失败,退出码为exit_code
    end
else
    -- 程序异常中断,比如被kill信号终止
end

可选方案:同时捕获输出和退出码

如果需要同时拿到程序的运行输出和退出值,可以用io.popen实现:

local proc = io.popen("你的可执行文件路径 2>&1") -- 2>&1用于合并标准错误输出到标准输出
local output = proc:read("*all")
local _, exit_type, exit_code = proc:close()

-- 后续判断逻辑和上述5.2+版本一致

内容的提问来源于stack exchange,提问作者MK Span

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 05:27:03