-3

いくつかの(コンパイルされたものであり、私のものではない)プログラムAがあります。これは、起動するたびに.logファイルを最初から開始します。そして、このアプローチを使用してこのログを処理するプログラムBを作成しました。

File.open("qconsole.log") do |log|
    log.gets nil # I am interested only in new lines
    loop do
        next sleep 0.1 unless line = log.gets
        line.chomp!
        puts line
        # some code
    end
end

たとえば、.logファイルの2つの新しい行の後に、次の出力が表示されます。

 player1: i talk blabla
 player2: no way!

しかし、プログラムAを終了して再起動すると、次のようになります。

]\quit 
----- Server Shutdown -----
==== ShutdownGame ====
AAS shutdown.
---------------------------
----- CL_Shutdown -----
RE_Shutdown( 1 )
Shutting down OpenGL subsystem
...wglMakeCurrent( NULL, NULL ): success
...deleting GL context: success
...releasing DC: success
...destroying window
...shutting down QGL
...unloading OpenGL DLL
-----------------------

この後、プログラムBは.logファイルを失ったようです。新しい行はもう印刷されません。nil私は、それがから永遠になると思いますlog.gets

log.getsでは、どうすれば、実行を停止して.logファイルを再度開く必要があるかを知ることができますか?

UPD:Windows 7

4

1 に答える 1

0

私の現在の汚い解決策:

logfilesize = File.stat(logfile).size
log = File.open logfile
log.gets nil

loop do
    logfilesize = File.stat(logfile).size.tap{ |t|
        if t < logfilesize
            log.close
            log = File.open logfile
        end
    }
    next sleep 0.1 unless line = log.gets
    line.chomp!
    puts line
    # some code
end
于 2013-02-17T17:28:14.990 に答える