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
相关产品推荐
相关产品推荐

