我正在尝试编写一个需要向用户显示消息的lua脚本,当然主机应用程序仅提供有限的支持。
所以我想打开一个控制台窗口并将print()重定向到它。我期待这样的事情能发挥作用:
io.stdout = io.popen('find /v ""', "w")
print("It works!")
但控制台窗口立即关闭,而不是等待来自管道的输入。
在Windows 7上使用lua 5.1
编辑:我注意到管道关闭时find
命令终止。可能是它没有从管道读取,或管道过早关闭?
答案 0 :(得分:2)
我想通了,在Windows上打开一个输出控制台,这可行:
local out = io.popen('find /v "" > con', "w")
function print(s)
out:write(s.."\r\n") --\r because windows
out:flush()
end
print("It really works this time!")
find命令似乎提前终止,因为它没有指定的stdout
;在最后提供> con
告诉它将stdout
设置到控制台,并使控制台保持打开状态。
答案 1 :(得分:1)
您必须将数据写入管道:
pipe = io.popen('find /v ""', "w")
pipe:write("It works!")
文档中没有任何迹象表明io.stdout
可以重置为指向其他文件句柄。事实上,有些帖子指出print
直接拨打fputs
,而不是io.stdout
。您可能最好将print
指向管道的编写器方法
old_print = print
print = function(...) pipe:write(...) end
然后在执行上述操作后对print
的任何调用将转到管道。理想情况下,一旦脚本结束,您应该将print
恢复到原来的状态:
print = old_print