0

他のプロセスからの入力を読み取って分析する lua スクリプトを作成しようとしています。この目的のために私は io.popen を使用しており、Windows では期待どおりに動作しますが、Unix(Solaris) では io.popen ブロックから読み取るため、スクリプトはすぐに戻るのではなく、何かが来るまでそこで待機します...

私の知る限り、スクリプト内から io.popen の機能を変更することはできません。可能であれば、C コードを変更する必要はありません。スクリプトをパッチ適用済みのコードにバインドする必要があるためです。バイナリ。

コマンドラインの解決策はありますか?

4

2 に答える 2

1

これまでのところ回答はありませんが、後世のために、誰かが同様のソリューションを必要とする場合、多かれ少なかれ次のことを行いました

function my_popen(name,cmd)
    local process = {}
    process.__proc = assert(io.popen(cmd..">"..name..".tmp", 'r'))
    process.__file = assert(io.open(name..".tmp", 'r'))
    process.lines  = function(self)
        return self.__file:lines()
    end
    process.close = function(self)
        self.__proc:close()
        self.__file:close()
    end
    return process
end

proc = my_popen("somename","some command")
while true
    --do stuf
    for line in proc:lines() do
        print(line)
    end
    --do stuf
end
于 2009-02-19T09:31:50.173 に答える