Lua:执行字符串并将命令的输出存储在变量中

时间:2014-09-15 14:48:12

标签: string variables lua output execute

我有一个Lua脚本,它接收一个字符串中的函数调用。我需要执行该调用并将输出检索为变量中的字符串,以便稍后将其发送到某处。

例如,我将收到字符串"json.encode('{1:1, 2:3, 5:8}')"。我想执行它并获取值为ret = json.encode('{1:1, 2:3, 5:8}')的变量。

我尝试过以不同的方式使用loadstring,包括我found in the docs的方式,但我无法按照自己的意愿使用它:

    > s = "json.encode('{1:1, 2:3, 5:8}')"
    > ret = assert(loadstring(s))()
    > print(ret)
    nil

我知道字符串正在执行,因为如果我设置s = print(json.encode('{1:1, 2:3, 5:8}')),我会看到输出。我只是不知道如何在变量中获得输出。

谢谢!

2 个答案:

答案 0 :(得分:3)

我刚刚找到了一种方法来做我想做的事,但我仍然想知道你们是否能找到任何缺陷/更好的方法来做到这一点,因为我对Lua来说很新:< / p>

    > s = "json.encode('{1:1, 2:3, 5:8}')"
    > s2 = "return("..s..")"
    > ret = assert(loadstring(s2))()
    > print(ret)
    "{1:1, 2:3, 5:8}"

答案 1 :(得分:3)

您需要从加载的块中返回值。因为它是你告诉lua你不关心返回的值,所以它扔掉它。

注意:我没有方便的json模块,所以我用一个函数替换了函数,该函数只是为了演示目的返回它的参数:

> json = { encode = function(s) return s end }
> s = "json.encode('{1:1, 2:3, 5:8}')"
> ret = assert(loadstring("return "..s))()
> print(ret)
{1:1, 2:3, 5:8}