2013-04-16 56 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你