在LuaJ中获取打印调用
2014-11-28 21:34:28
收藏:0
阅读:95
评论:2
我正在编写一个使用 Lua 脚本确定在程序的某些区域输出内容的 Java 程序。目前,我的代码如下:
Globals globals = JsePlatform.standardGlobals();
LuaValue chunk = globals.loadfile(dir.getAbsolutePath() + "/" + name);
chunk.call();
String output = chunk.tojstring();
问题是调用 tojstring() 似乎返回 Lua 脚本的 return 值。这没关系,但我需要获取 print 调用,因为那将显示在屏幕上。目前,print 调用直接发送到控制台(打印到控制台),而我无法找到一种检索这些打印调用的方法。
我尝试查阅文档,但成功不大。如有需要,可以从 LuaJ 进行更改。
点赞
用户350651
扩展Joseph Boyle的答案(几年后):如果您喜欢,还可以将printStream设置为ByteArrayOutputStream(无需将其设置为磁盘上的文件)。我在使用LuaJ的JUnit测试中进行了这项工作:
@Test
public void testPrintToStringFromLuaj() throws IOException {
String PRINT_HELLO = "print (\"hello world\")";
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintStream printStream = new PrintStream(baos, true, "utf-8");
Globals globals = JsePlatform.standardGlobals();
globals.STDOUT = printStream;
LuaValue load = globals.load(PRINT_HELLO);
load.call();
String content = new String(baos.toByteArray(), StandardCharsets.UTF_8);
printStream.close();
assertThat(content, is("hello world\n"));
}
2017-12-06 17:27:20
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
我实际上通过将
globals对象中的STDOUT变量更改为一个临时文件来解决了问题,然后从临时文件中读取数据。可能不是最好的解决方案,但完全可以正常工作。