Lua 解释器问题

lua_pushstring(L,"print(i)");
lua_call(L,0,0);

如何从以下代码中获得输出:

原文链接 https://stackoverflow.com/questions/4280913

点赞
stackoverflow用户393077
stackoverflow用户393077

如果你指的是返回值,那么它将会在栈的顶部。

如果你指的是来自于 print 语句的输出…那就有点难了。我在这里阅读到的建议是,使用一个自定义函数代替 print 来完成你需要的操作。

当然,这有点复杂,而且我已经有一段时间没有接触过 lua 了…

2010-11-25 21:24:04
stackoverflow用户501459
stackoverflow用户501459

那段代码根本不起作用。你试图调用一个字符串。你需要先将一个函数值推入堆栈,然后再调用 lua_call

lua_getglobal(L, "print");          // 将打印函数推入堆栈
lua_pushstring(L, "Hello, World!"); // 将参数推入堆栈
lua_call(L,1,0);                    // 调用有1个参数的 'print' 函数
2010-11-25 22:04:29
stackoverflow用户400127
stackoverflow用户400127

如果想要从C中运行任意的Lua代码,你需要使用luaL_dostring,就像这个问题中提到的一样:C & Lua: luaL_dostring return value

编辑:请注意,Lua默认的print函数仍然会将输出直接打印到控制台。如果你想要捕获它的输出,你需要以某种方式重定向stdout(可能是到管道)

2010-11-25 23:20:03