我有多个lua文件,其中包含我想通过Python提取的信息。 要在Python中使用Lua我正在使用疯狂的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概念的教程(这对我来说似乎有些奇怪),我想next或者pairs的函数可能对我的情况有用。 虽然这些函数仍然让我感到困惑,但在示例中我发现它们总是在循环中使用,但是当我做这样的事情时:

x = next(source.env)

代替

k, v = next(source.env)

似乎x现在只包含键,而不是值。 当使用pairs而不是next pairs时,我得到一个函数,但我不知道如何调用它。

我的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一起使用的优雅解决方案是什么?

===============>>#1 票数: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

  ask by soerface translate from so

未解决问题?本站智能推荐:

2回复

Lua中的Python eval()

我有以下Lua代码: 此代码返回错误。 我想让它像输入一样工作: 在python中,我将处理以下情况: 我可以在Lua中使用类似或不同的方法吗?
1回复

Redis:如何从Lua脚本中HMSET字典?

我试图将Python dict作为参数传递给Lua脚本, HMSET其从脚本HMSET传递给Redis键。 我有两个问题。 我应该如何将dict从Python传递到Lua脚本,再从Lua脚本传递给Redis? 使用json.dumps()它传递给Lua似乎很简单。 但是,如何
1回复

如何使用Python解析LUA表并推送到SQL数据库?

我玩了一款名为DCS(数字战斗模拟器)的游戏,并希望将游戏统计信息导出到数据库中,然后在网页上使用PHP进行调用。 游戏将代码保存到LUA表中,示例数据如下所示... 类别显示飞机的类型,飞行时间,被杀死的飞机,飞机的类型,被杀死的飞机总数,武器,武器类型,命中率,杀伤力,射击,动作,损失,飞行员
1回复

如何解析Wireshark中的protobuf数据包

我的目标是有一个插件/解剖器,可以解析基于protobuf(UDP)的协议。 我在网上找到了一个用于协议缓冲消息的自动生成Wireshark / Ethereal解剖器插件: https : //code.google.com/archive/p/protobuf-wireshark/
2回复

在Lua中,如何使用字符串键插入表中?

在命令中 您如何使用它,但对于插入具有字符串键? 伪代码 所以我最终得到一张桌子... 编辑 我认为我的示例使人们感到困惑……我在问如何使用“ insert.table”,但要插入带有字符串键的内容... 这样的东西?
1回复

Lua中的字符串比较

尝试创建字典函数时,首先创建了一个二维表: 然后,我从txt文件中将单词读入字典表,字典表中有26个大写字母的条目,同样也有小写字母的条目。 当我尝试搜索表格以比较单词时,我遇到了一些困难: 我知道在dictionary [1] [176]中是“ Ave”,但是当我尝试进行
1回复

Lua表使用字符串键排序[重复]

这个问题已经在这里有了答案: 在Lua中按值对表进行关联排序 6回答 我需要这张桌子的帮助 我忽略了该表上的所有值,并按表示例上的第一个值排序。 输出>
1回复

lua-带有字符串键的table.concat

我在lua的table.concat中遇到问题,并怀疑这只是我的无知,但是找不到我为什么会出现这种行为的详细答案。 t2上运行的table.concat没有结果。 我怀疑这是因为键是字符串而不是整数(索引值),但是我不确定为什么这很重要。 我正在寻找A)为什么table.conc
1回复

LUA在表中选择特定的字符串

我在从LUA表中恢复值时遇到问题。 表(字符串): 是否可以为第一行选择“ / get”和“ value0”。 其他所有行上的“ / get”和“ value1或2/3/4”? 我认为我有一个可行的想法,但说起来容易做起来难 1)计算总数“ \\ n”并加一。
2回复

带字符串键的Lua表不适用于数字索引?

我是Lua的初学者。 我以为使用字符串键将值推送到表会自动进行数字索引,但我认为我错了。 我的代码: 虽然此代码工作正常并打印预期的结果, 如果我尝试以这种方式打印结果, 我收到以下错误: 这是否意味着我不能使用for number迭代遍历表而不必知道