在lua中搜索包含特定字符串的关键字。

我有多个包含信息的 Lua 文件,我想通过 Python 提取这些信息。为了在 Python 中使用 Lua,我使用 lunatic-python,但这不是一个要求 - 如果您有其他方法也可以。 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 时,我得到一个函数,但我不知道如何调用它。

我的 Python 模块目前看起来像这样:

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 一起使用?

点赞
用户2279620
用户2279620

如果执行以下脚本:

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 给您。

2013-04-16 15:25:32