-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 文件中的两个新行之后,我看到以下输出:

 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 文件。它不再打印我的新行了。我想,它nillog.gets.

那么我怎么知道我需要停止执行log.gets并重新打开 .log 文件呢?

升级版: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 回答