1

(cgiスクリプトを介して)カスタムログファイルに書き込むApacheサーバーがあります。また、そのログファイルの末尾を定期的にフェッチするPythonスクリプトもあります。これが私のテール関数です:

def tail(f, window = 1):
    f = open(f, 'r')
    BUFSIZ = 1024
    f.seek(0, 2)
    bytes = f.tell()
    size = window
    block = -1
    data = []
    while size > 0 and bytes > 0:
        if (bytes - BUFSIZ > 0):
            # Seek back one whole BUFSIZ
            f.seek(block*BUFSIZ, 2)
            # read BUFFER
            data.append(f.read(BUFSIZ))
        else:
            # file too small, start from begining
            f.seek(0,0)
            # only read what was not read
            data.append(f.read(bytes))
        linesFound = data[-1].count('\n')
        size -= linesFound
        bytes -= BUFSIZ
        block -= 1

    f.close()
    return '\n'.join(''.join(data).splitlines()[-window:])

個別に考えると、PythonスクリプトとApacheログはどちらも正常に機能します。ただし、この同じログファイルで同時に作業すると、ログファイルの更新が停止します。

Apacheの書き込みに干渉しないテール読み取り関数をPythonで実装するにはどうすればよいですか?

4

1 に答える 1

0

実装の詳細に関するインスピレーションについては、ActiveStateのpytailerプロジェクトまたはこのレシピをご覧ください。

于 2012-06-06T10:23:45.057 に答える