lua中执行luci.sys.call、luci.sys.exec、os.execute的区别

相同点:都是调用Linux底层脚本及程序
不同点:
(1)luci.sys.call(command)
脾气捉摸不透,实际使用有些时候没有得到任何状态或数据返回,纯粹被用了一下。
(2)luci.sys.exec(command)
比较可靠,可以返回标准输出,比如value = luci.sys.exec(command)获取执行结果用作参量。
message = luci.sys.exec(command 2>&1)则错误、标准都输出,用作显示执行过程。
(3)os.execute(command)
可以得到命令的运行状态,执行成功则得到 true,失败则得到 false,但不会标准输出 0 或 1。常用作判断。比如

if os.execute('ls "'..file..'" >nul 2>nul') ~= 0 then
    message = '文件不存在'
end
但下面这样使用却是不行的(因为不会标准输出 0 或 1):
value = os.execute('ls "'..file..'" >nul 2>nul') 
if value ~= 0 then
    message = '文件不存在'
end

实际使用发现:当执行过程要耗费很长时间(比如复制一个很大的文件)时,luci.sys.exec会一直到执行结束才返回数据。而os.execute却没有,很快返回(但并不是每个命令都这样,捉摸不透)。luci.sys.call用得少,没留意。

你可能感兴趣的:(lua,c语言,开发语言)