我正在尝试使用
luv
构建一个NES模拟器插件,该插件可以在不暂停游戏模拟的情况下与另一个进程通信。当我通过手动键入输入数据进行测试时,我有一些东西运行顺利,但当我通过管道测试与另一个进程的通信时,lua脚本似乎从未收到任何数据。
作为一个最小的可重复示例,使用以下lua脚本:
local uv = require("luv")
local stdin = uv.new_poll(1)
stdin:start("r", function() print("uv callback") end)
uv.run("once")
当我手动按下enter键时,一切按预期工作:
% lua-5.1 min.lua
uv callback
%
但是,通过管道从另一个程序传入空白行似乎不起作用:
% echo | lua-5.1 min.lua
-- nothing happens, and lua-5.1 does not exit
我相信,通过额外的测试,这不是一个缓冲问题:编写一个手动刷新的程序来代替
echo
并添加
io.stdin:setvbuf("no")
在lua脚本的顶部不会改变行为。(事实上,在实验中,它似乎以某种方式直接连接到终端:手动按enter键仍会导致回调运行和程序退出!)
为什么我的脚本看不到管道中的数据,我该如何更改它才能看到?