2016-07-14 30 views
0

使用系統命令我試圖通過運行命令「IP -4路徑顯示」打印的值。 通過命令實際運行它給出3個值。但在嘗試編程時,迭代運行前兩次。第三次迭代返回nil。如何在Lua

在命令行中運行時:

[email protected]:/usr/lib/lua/transformer/mapper# ip -4 route show 
169.254.1.0/24 dev vlan_lte_mgmt proto kernel scope link src 169.254.1.1 
192.168.1.0/24 dev br-lan proto kernel scope link src 192.168.1.1 
239.0.0.0/8 dev br-lan scope link 

雖然試圖通過計劃,迭代工作只有2次。最後一次迭代是重新調整nil值。

function M.loadRoutes(onlyDefault)                              
    local routes = {}                                  
    local defaultRoute                                 
    local i, t, popen = 0, {}, io.popen                             
    local fd = popen("ip -4 route show")                             
    if fd then 
    for line in fd:lines() do                               
     local fields = {}                                
     fields.destip,fields.ifname,fields.gateway = line:match("(%S+)%s+%S+%s+(%S+)%s+%S+%s+%S+%s+%S+%s+%S+%s+%S+%s+(%S)")        

請幫我解決我的問題。

回答

0

正如FareakyGnome所說,您的模式是搜索一個包含9個非空格「單詞」的行,但輸出中的最後一行只有5個非空格單詞。該模式不匹配,因此line:match(...)返回nil,並且分配的所有三個變量都將分配爲nil。

你可能需要改變你是如何想的線條,以使這項工作相匹配。也許嘗試在一個單獨的比賽在一場比賽前兩個變量和第三匹配:

fields.destip, fields.ifname = line:match("(%S+)%s+%S+%s+(%S+)") 
fields.gateway = line:match("%S+%s+%S+%s+%S+%s+%S+%s+%S+%s+%S+%s+%S+%s+%S+%s+(%S)") 

那麼前兩個變量應該得到填補,如果有足夠的非空字的三分之一將被填補,否則保持零,表示該字段在輸出中不可用。