1

ログファイルが表示されるのを待つ以下のコードがあります。ログファイルが表示されると、外部プログラムによってそこに保存されます。ログファイルがまだ書き込まれている間に開き、内容を印刷します。外部プログラムによって更新されている 書き込まれている新しい行を印刷したい。現在、印刷をクリアしてテキスト全体を再印刷しますが、これは避けたいのですが、新しい行だけを印刷したいと思います。もう 1 つの改善点は、Python スクリプトを一時停止するのではなく、ファイルが表示されるのを待つことです。

    a=0
    while a <= 10:
        if os.path.isfile(logPath):
            infile = file(logPath)
            break
        a=a+1
        time.sleep(1)
    fileSize1 = 0
    while True:
        wx.Yield()
        fileSize = os.path.getsize(logPath)
        if fileSize > fileSize1:
            lines = infile.readlines()
            log.Clear()
            log.Refresh()
            for line in lines:
                print line.rstrip()
            if "DBG-X: Returning 1" in line:
                break
            if "DBG-X: Returning 0" in line:
                break
        fileSize1 = fileSize
        infile.seek(0)
4

1 に答える 1

0

このようなものを試してみてください...

lastSize = 0
lastLineIndex = 0
while True:
    wx.Yield()
    fileSize = os.path.getsize(logPath)
    if fileSize > lastSize:
        lines = infile.readlines()
        newLines = 0
        for line in lines[lastLineIndex:]:
            newLines += 1
            print line.rstrip()
        lastLineIndex += newLines

        if "DBG-X: Returning 1" in line:
            break
        if "DBG-X: Returning 0" in line:
            break
    fileSize1 = fileSize
    infile.seek(0)

キービットは

for line in lines[lastLineIndex:]:

すでに見た行をスキップする場所。おそらくnewLines変数をスキップしてそのまま実行することもできますlastLineIndex += 1が、私はlastLineIndexfor ループ内で変更することを嫌います (他の言語での問題を回避するために身に付けた習慣です)。

于 2014-02-12T22:22:34.470 に答える