2013-04-16 79 views
0

我有多個lua文件,其中包含我想通過Python提取的信息。要在Python中使用Lua,我使用的是lunatic-python,但這不是必需條件 - 如果您有其他方法,也可以。在lua中搜索包含特定字符串的密鑰

的LUA文件看起來像:

source = { 
    licences = { 
     "GPL", 
     "MIT", 
    }, 
    env = { 
     MYTOOL_VERSION = "1.2.3", 
     OTHER_KEY = "OTHER_VALUE", 
    }, 
    some_other_keys = { 
     ... 
    }, 
} 

我感興趣的值是source.env.MYTOOL_VERSION,而MYTOOL始終是不同的東西。由於我對lua沒有經驗,我不知道如何告訴它「獲取包含字符串VERSION的密鑰的值」。我閱讀了一些關於Lua中的tables概念的教程(對我來說這仍然有點奇怪),我認爲功能nextpairs對我來說可能是有用的。儘管這些功能還是讓我困惑,在示例中,我發現他們總是在循環使用的,但是當我做這樣的事情:的

x = next(source.env) 

代替

k, v = next(source.env) 

似乎x現在只包含關鍵,而不是價值。當使用pairs而不是next時,我得到一個函數,但我不知道如何調用它。

我Pythonscript目前看起來是這樣的:

import lua 

with open(project_path) as f: 
    script = f.read() 

lua.execute(script) 

i = 1 

licences = [] 

while True: 
    data = lua.globals().source.licences[i] 
    if data is None: 
     break 
    licences.append(data) 
    i += 1 

version = lua.eval('source.env[next(source.env)]') if lua.globals().source.env is not None else 'unkown', 

剛剛得到的任何鍵在env表,不一定包含VERSION的一個值。

那麼,什麼是一個優雅的解決方案來獲取此文件的所需數據以便在Python中使用它?

回答

2

如果你執行這個腳本

function version(t) 
    for k,v in pairs(t) do 
     if k:match"._VERSION$" then return v end 
    end 
end 

然後EVAL version(source.env),我希望它返回1.2.3你