当用lua_call()函数时,其输出结果直接在标准输出,请问,怎样可以用字符串去接收这个结果呢?

zht8630267 2009-03-17 09:37:34
while (fgets(buff, sizeof(buff), stdin) != NULL)
{
error = luaL_loadbuffer(L, buff, strlen(buff),
"line") || lua_pcall(L, 0, 0, 0);
if (error)
{
fprintf(stderr, "%s", lua_tostring(L, -1));
lua_pop(L, 1);/* pop error message from the stack */
}
}

这段代码是网上找的lua解释器的代码,在调用lua_pcall()后他的执行结果就直接输出在标准输出上了,

我现在想得到这个结果,好用socket传到远程的电脑上显示,请各位高手帮帮忙指导一下。。。
...全文
532 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
toryln 2009-10-20
  • 打赏
  • 举报
回复
我重定向后也不行啊~~~~
大哥,出来救救急啊~~~~
zht8630267 2009-04-10
  • 打赏
  • 举报
回复
//输出重定向,让Lua解释结果输出到file.txt文件里
FILE *stream ;
if((stream = freopen("file.txt", "w", stdout)) == NULL)
exit(-1);
error = luaL_loadbuffer( L , cText, strlen(cText),"line") ||
lua_pcall( L, 0, 1, 0);//解释lua命令
stream = freopen("CON", "w", stdout); //注一

我的代码是这样,你看下有没帮助,还有,文件内容好像在最后一句执行完了才会写入文件file.txt
elfc2000 2009-04-09
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zht8630267 的回复:]
严重感谢楼上,哈哈。利用重定向搞定了,,,谢谢哈。。。。。
结贴结贴,第一次结贴啊。。。。。太激动了。。。。
其中20分就聊表感谢一下wolf0403啊,呵呵。
[/Quote]


我怎么重定向后不行啊,最简单命令 print(1)的结果都不能保存到我设置的文件中

但是我自己调用printf函数却可以保存到该文件中

是不是lua的print函数并没有调用printf函数,那他怎么把结果输出的标准输出呢?
zht8630267 2009-03-18
  • 打赏
  • 举报
回复
严重感谢楼上,哈哈。利用重定向搞定了,,,谢谢哈。。。。。
结贴结贴,第一次结贴啊。。。。。太激动了。。。。
其中20分就聊表感谢一下wolf0403啊,呵呵。
zht8630267 2009-03-18
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 hairetz 的回复:]
引用楼主 zht8630267 的帖子:
while (fgets(buff, sizeof(buff), stdin) != NULL)
{
error = luaL_loadbuffer(L, buff, strlen(buff),
"line") || lua_pcall(L, 0, 0, 0);
if (error)
{
fprintf(stderr, "%s", lua_tostring(L, -1));
lua_pop(L, 1);/* pop error message from the stack */
}
}

这段代码是网上找的lua解释器的代码,在调用lua_pcall()后他的执行结果就直接输出在标准输出上了,

我现…
[/Quote]
现在郁闷的是我找不到pcall()里面的输出代码,,,,
  • 打赏
  • 举报
回复
[Quote=引用楼主 zht8630267 的帖子:]
while (fgets(buff, sizeof(buff), stdin) != NULL)
{
error = luaL_loadbuffer(L, buff, strlen(buff),
"line") || lua_pcall(L, 0, 0, 0);
if (error)
{
fprintf(stderr, "%s", lua_tostring(L, -1));
lua_pop(L, 1);/* pop error message from the stack */
}
}

这段代码是网上找的lua解释器的代码,在调用lua_pcall()后他的执行结果就直接输出在标准输出上了,

我现在想得到这个结果,好用socket传…
[/Quote]

很多方法啊,最容易的就是重定向,把stdout >到某个文件里。
Wolf0403 2009-03-17
  • 打赏
  • 举报
回复
客户传过来执行的 lua 代码里没有 io.write ?那么是怎么输出的?
zht8630267 2009-03-17
  • 打赏
  • 举报
回复
0.我也是刚接触lua一个星期,呵呵,完成的程序均为网上源码
1.现在我郁闷的是追踪pcall()时根本找不到哪里是输出函数,(也没有io.write,所以替换不了)
2.客户端没代码,呵呵,是直接windows自带的telnet程序
3.谢谢你的帮忙
4.还有其他大虾没啊。呵呵
Wolf0403 2009-03-17
  • 打赏
  • 举报
回复
0. 我不懂 Lua,所有信息来自 Google + 推理,有错误怪
1. 写一个 Lua 脚本,测试一下这个思路:用一个函数代替 io.write ,把要输出的内容劫持,譬如写到文件中。如果成功,进入 2
2. 在 server 进程中,执行传来的 lua 指令之前,先 lua_pcall 一段内容,替换 io.write,写到文件中
3. 执行客户代码
4. server 程序读取指定文件,把输出传回。
zht8630267 2009-03-17
  • 打赏
  • 举报
回复
我的程序功能是这样的,就是从远程接收lua命令,然后经过服务器的lua解释器解释之后把结果送回远程客户端,上面代码就是在服务端的,可是执行之后其结果是在服务端上,我想得到他的结果然后再传回客户端去,,,楼上你是第一个回复我的,呵呵,,感动到痛哭流涕啊,不过你介绍的方法还没看懂,呵呵,
Wolf0403 2009-03-17
  • 打赏
  • 举报
回复
http://lua-users.org/lists/lua-l/2005-12/msg00012.html
注入一段 lua 代码替换 io.write,在被调用时候回调一个 C 的代码接受这些输出,然后回头再进行处理?
zht8630267 2009-03-17
  • 打赏
  • 举报
回复
怎么没有高手路过啊????在线等啊,,,,,各位大虾猩猩好啊。。。。

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧