获取返回状态和程序输出
2011-9-30 8:10:9
收藏:0
阅读:218
评论:6
我需要使用 Lua 运行一个二进制程序,该程序可能会在其标准输出中写入一些内容,并返回状态码(也称为“ 退出状态”)。
我在网上搜索,但找不到我所需的内容。但我发现在 Lua 中:
os.execute()
返回状态码io.popen()
返回可用于读取进程输出的文件句柄
但是我需要两者。编写一个在幕后运行两个函数的包装函数不是选择,因为进程开销可能会发生变化,并可能在连续运行中发生结果变化。我需要编写这样的函数:
function run(binpath)
...
return output,exitcode
end
有人知道如何解决这个问题吗?
附:目标系统运行 Linux。
原文链接 https://stackoverflow.com/questions/7607384
点赞
stackoverflow用户714501
这个功能在 C 语言中通过 pclose
实现。
成功返回后,pclose() 函数将返回命令语言解释器的终止状态。
该解释器返回其子进程的终止状态。
但是 Lua 没有正确实现该功能 (io.close
总是返回 true)。我还没有深入研究这些线程,但一些人对此进行了抱怨。
2011-09-30 08:00:01
stackoverflow用户1105870
使用 Lua 5.2,我可以执行以下操作并且它可以正常运行:
-- 这将打开文件
local file = io.popen('dmesg')
-- 这将读取所有输出,如常
local output = file:read('*all')
-- 这将获取一个带有一些返回结果的表格
-- rc[1] 将是 true、false 或 nil
-- rc[3] 将是信号
local rc = {file:close()}
希望这可以帮到你!
2012-12-25 15:38:57
stackoverflow用户1266062
我不能使用 Lua 5.2,因此我使用这个辅助函数。
function execute_command(command)
local tmpfile = '/tmp/lua_execute_tmp_file'
local exit = os.execute(command .. ' > ' .. tmpfile .. ' 2> ' .. tmpfile .. '.err')
local stdout_file = io.open(tmpfile)
local stdout = stdout_file:read("*all")
local stderr_file = io.open(tmpfile .. '.err')
local stderr = stderr_file:read("*all")
stdout_file:close()
stderr_file:close()
return exit, stdout, stderr
end
2017-03-07 09:50:57
stackoverflow用户7480063
是的,你是正确的,os.execute()
有返回值,如果你知道如何使用带或不带 lua 的命令来运行它,这就很简单了。你可能还想知道它返回多少个变量,这可能需要一些时间,但我认为你可以尝试使用以下代码:
local a, b, c, d, e=os.execute(-无论你的命令是什么-)
对于我的示例,a 是第一个返回值,b 是第二个返回值,依此类推。我认为我根据你的问题回答得很正确。
2017-03-09 05:35:20
stackoverflow用户4675927
以下是我的做法。
local process = io.popen('command; echo $?') -- 显示上一条命令的返回码
local lastline
for line in process:lines() do
lastline = line
end
print(lastline) -- 返回值是输出的最后一行
如果最后一行的长度是固定的,则可以使用file:seek("end", -offset)直接读取它。偏移应该是最后一行的字节数。
2019-11-17 15:25:48
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
如果你在 Win32 或 POSIX 环境下运行此代码,你可以尝试使用 Lua 扩展:http://code.google.com/p/lua-ex-api/
或者,你可以编写一个小型的 shell 脚本(假设有 bash 或者类似的程序可用),它可以:
然后,获取 io.popen 的所有输出并向后解析。
完整披露:我不是 Lua 开发者。