gpt4 book ai didi

linux - Lua 脚本在执行无效的 Linux 命令时无法检测/捕获错误

转载 作者:IT王子 更新时间:2023-10-29 01:06:14 33 4
gpt4 key购买 nike

我有以下函数,只要我给它一个有效的命令来执行就可以正常工作。只要我给它一个不存在的命令,脚本就会被错误消息中断。

#!/usr/bin/lua
function exec_com(com)
local ok,res=pcall(function() return io.popen(com) end)
if ok then
local tmp=res:read('*a')
res:close()
return ok,tmp
else
return ok,res
end
end
local st,val=exec_com('uptime')
print('Executed "uptime" with status:'..tostring(st)..' and value:'..val)
st,val=exec_com('zzzz')
print('Executed "zzzz" with status:'..tostring(st)..' and value:'..val)

当我运行上面的脚本时,我得到以下输出:

Executed "uptime" with status:true and value: 18:07:38 up 1 day, 23:00,  3 users,  load average: 0.37, 0.20, 0.20

sh: zzzz: command not found
Executed "zzzz" with status:true and value:

你可以清楚地看到 pcall() 函数在执行 "zzzz"时仍然报告成功,这很奇怪。

谁能帮我设计一种方法,在使用 Lua 脚本执行不存在或格式错误的 Linux 命令时捕获异常?谢谢。

编辑:在得到 pcall() 按预期工作的说明后重申了我的请求,问题是由于 popen() 未能抛出错误。

最佳答案

我使用的方法类似于您的“临时解决方法”,但可以为您提供更多信息:

local cmd = "uptime"
local f = io.popen(cmd .. " 2>&1 || echo ::ERROR::", "r")
local text = f:read "*a"

if text:find "::ERROR::" then
-- something went wrong
print("error: " .. text)
else
-- all is fine!!
print(text)
end

关于linux - Lua 脚本在执行无效的 Linux 命令时无法检测/捕获错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24224818/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com