在NodeWebkit中使用lua.vm.js进行IO(输入输出)操作

我使用npm包lua.vm.js在基于node的应用程序中执行一些现有的lua代码

_newtest.lua_文件包含:

local myFile, err = io.open('/tmp/file.txt')
print(myFile)
print(err)
io.input(myFile)
theContent = io.read('*all')
print(theContent)

在我的javascript代码中:

var fs = require('fs');
theFileContent = fs.readFileSync("./newtest.lua", "utf8");
var LuaVM = require('lua.vm.js');
var l = new LuaVM.Lua.State();
l.execute(theFileContent);

如果我简单地执行:

lua newtest.lua

正如预期的那样,我得到了_output console_打印出'/tmp/file.txt'的内容。

但是,如果我从基于nw的应用程序运行相同的代码,我什么也看不到:输出控制台上没有任何东西,甚至全局变量theContent也没有设置正确的值。

myFilenilerr为**/tmp/file.txt: No such file or directory**

但是文件就在那里。

我开始认为由lua.vm.js执行的lua代码不允许io操作了。 有什么想法?

更新 我尝试运行一个简单的node应用程序(从图片中删除nodewebkit)。 这是我正在运行的example.js

点赞
用户282536
用户282536

如我在https://github.com/kripken/lua.vm.js/issues/30中回答的:

lua.vm.js将IO虚拟化为内存虚拟文件系统(使用emscripten实现)。 这是因为它的主要目标是浏览器,而真实的IO在浏览器中是不存在的。

如果您在node中运行,则可以使用node文件函数:

local file = js.global:require"fs":open("/tmp/file.txt")
2015-07-27 23:30:58