【发布时间】:2012-08-11 01:17:16
【问题描述】:
我有一个运行嵌入式 Lua 的 c 程序。截至目前,这只是一个你好世界。不过,在继续之前,我希望能够将 lua 输出发送到 stdout 以外的其他地方,以便我可以以某种方式对其进行操作。这是我的代码:
#include <stdio.h>
#include <lua.h>
#include <lauxlib.h>
#include <lualib.h>
int main() {
lua_State *luaVM = luaL_newstate();
//char result[1024];
if (luaVM == NULL) {
printf("Error initializing lua!\n");
return -1;
}
luaL_openlibs(luaVM);
luaL_dostring(luaVM, "print(\"hello world!\")");
//Somehow put the output into result
//printf("%s\n%s\n", result, result);
lua_close(luaVM);
return 0;
}
例如,我想使用在 cmets 中看到的result 来打印两次 lua 代码的结果。这个可以吗?
【问题讨论】:
-
我过去做过。你需要修补 Lua 来实现这一点。你用的是什么版本?我的补丁适用于 Lua 5.1,但我也可以将其移植到 5.2。
-
我使用的是 5.2。这真的不可能作为 C API 中的一个选项吗?
-
你知道,除了完全重新路由
stdout,我更愿意避免这种情况 -
我的补丁是关于将输出函数重新定义为钩子,然后从应用程序或中间库设置这些函数,以便您可以使用自定义输出函数。
-
@AndrejsCainikovs 我不明白。我想避免将
stdout重新路由到自定义流,因为我使用stdout进行调试,并且希望避免一直来回切换。你的补丁允许我这样做吗?