LUCI用到的一些方法記錄

接觸LUCI的時間並很少,沒有太過深刻地瞭解,但作了一個項目,其間接觸到了一些LUCI方面的應用,因此特來跟你們分享一下。框架

1. LUCI的跳轉方式

其實這個會看源碼的都不難找出來,這裏就當是爲你們省點事兒吧,上代碼:函數

local http = require 'luci.http'
local dsp = require 'luci.dispatcher'

http.redirect(dsp.build_url("/admin/system/wifitest"))
  • httpdsp是分別加載LUCI的HTTP處理類和基礎類
  • 最後調用HTTP處理類中的重定向函數redirect()來進行跳轉,而爲了URL格式規範,因此這裏使用了基礎類中的build_url()函數來生成規範的URL路徑。

2. LUCI 運行Linux命令的方法

LUCI做爲openwrt的內嵌CGI處理框架,它有本身的方法去的直接執行Linux的一些命令,以達到一些直接操控的目的。
在我接觸期間,發現有三種方法能夠執行Linux的命令:ui

  1. 使用io.execute()lua

    io.execute("mkdir /data/test") -- 該函數一次只能執行一條Linux命令,好處是直接就能夠用,而不用先加載類庫
  2. 使用luci.util.exec()url

    luci.util.exec("mkdir /data/test") -- 該函數也是一次只能執行一條Linux命令,這個是依賴於LUCI裏的util的類,能夠像這樣直接寫,也能夠先加載類庫,以下:
    local util = require 'luci.util'; util.exec("mkdir /data/test")
  3. 調用system模塊裏的fork_exec()函數spa

    local sys = require 'luci.controller.admin.system'; sys.fork_exec("mkdir /data/test; chmod 0755 /data/test")
    -- 該函數能夠多句代碼進行連續執行,或是你想作一些連貫操做的話,那麼這個函數我以爲仍是挺好用的。
  4. ...其實……沒有了。LUCI我沒有還有好些內容沒搞懂,關於執行Linux命令的方法,也只找到這幾個。哦,還有,如果你不想加載庫,也能夠將fork_exec()移植到的你當前的控制器中,而後就能直接調用了。

3. LUCI字符串的截取和去除空格的函數(網上摘錄)

LUCI裏面,也能夠說是Lua裏,對於字符的操做比較少,我是PHP出身,PHP裏經常使用的一些函數LUCI裏面都沒有,都要本身去定義,在這裏共享一下我找到的字符串截取和去除字符串空格的函數。上代碼:code

function trim(s)
    return (string.gsub(s, "^%s*(.-)%s*$", "%1"))
end

-- 字符串爲lua:  v1.122
function cut_name(s)
    s_index = string.find(s, ":")
    str = string.sub(s, s_index+1)
    str = trim(str)
    return str
end

就分享那麼多,歡迎你們多多交流~ci

相關文章
相關標籤/搜索