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

Conky调用Lua函数报错:未返回字符串,请求排查错误

问题排查与解决

错误原因

你使用的os.execute()函数不会返回命令的输出结果,它返回的是命令执行的状态(成功返回true,失败返回false+错误码)。从你的测试输出能明显看出:4902.65是命令直接打印到终端的内容,而函数实际返回的是true——这就导致Conky报错,因为它要求Lua函数必须返回字符串,你却返回了布尔值。

修复方案

改用io.popen()来捕获命令的输出内容,它能创建管道读取命令的标准输出。修改后的Lua函数如下:

function conky_func()
    local handle = io.popen("ps aux | awk '{sum+=$6} END {print sum/1024}'")
    local result = handle:read("*a")
    handle:close()
    -- 移除输出末尾的换行符,避免Conky显示多余空行
    result = result:gsub("\n$", "")
    return result
end

代码说明

  • io.popen()执行目标命令并返回一个文件句柄
  • handle:read("*a")读取命令的所有输出内容
  • gsub("\n$", "")清除输出末尾的换行符,保证返回内容整洁
  • 最终返回的是命令输出的字符串,完全符合Conky的要求

验证效果

在Lua终端测试修改后的函数,会直接返回数值字符串,不会再额外输出布尔值:

$ lua
> function conky_func()
>>     local handle = io.popen("ps aux | awk '{sum+=$6} END {print sum/1024}'")
>>     local result = handle:read("*a")
>>     handle:close()
>>     result = result:gsub("\n$", "")
>>     return result
>> end
> conky_func()
4902.65

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 22:35:19