Lua的哪些特性可以作为Python或TCL expect中的pexpect使用?

我有一些 shell 脚本,它们会将一些消息打印到 stdout,如果输出匹配某个正则表达式,我想要生成一些其他进程,我可能还想要一段时间内挂起 shell,直到其他进程给出反馈。我的要求基本上像 shell 和 tcl expect 中的管道,或者是 python 中的 pexpect。我的问题是,Lua 是否提供这样的功能?

我考虑了一下 Lua 的协程,但它不能在执行 shell 脚本的中间进行 yield,所以我没有深入研究。

点赞
用户3080396
用户3080396

不幸的是,Lua不提供管道支持,因此您必须在读和写之间选择。您可以通过迭代 io.popen() 执行过程的 :lines() 来实现最接近的效果:

for line in io.popen('/some/other/process'):lines() do
    -- 上一行将等待输出

    if line:match '^some regex' then
        -- 找到匹配项!做一些操作
    end

end  -- 到达文件结尾

如果您可以访问C模块,luaposix 提供了一个通过 posix.pipe() 接口的 pipe()

但是,请记住,Lua可能不是最适合这项工作的工具。依我之见,您最好使用TCL或Python,甚至是一个bash脚本。

2014-02-28 14:27:08