我需要使用Lua运行一个二进制程序,该程序可能会在其stdout中写入一些内容,并且还返回一个状态码(也称为“exit status”)。

我在网上搜索,找不到符合我需要的内容。但是我发现在Lua中:

  • os.execute() 返回状态码
  • io.popen() 返回一个文件处理程序,可用于读取进程输出

  • 但是我都需要。编写在后台运行这两个函数的包装器函数是不可行的,因为这会增加过程开销,并可能在连续运行时改变结果。我需要编写一个这样的函数:
    function run(binpath)
        ...
        return output,exitcode
    end
    

    有谁知道如何解决这个问题?

    PS。目标系统为Linux。

    最佳答案

    使用Lua 5.2,我可以执行以下操作,并且可以正常工作

    -- This will open the file
    local file = io.popen('dmesg')
    -- This will read all of the output, as always
    local output = file:read('*all')
    -- This will get a table with some return stuff
    -- rc[1] will be true, false or nil
    -- rc[3] will be the signal
    local rc = {file:close()}
    

    我希望这有帮助!

    关于lua - 获取退货状态和程序输出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7607384/

    10-13 06:27