Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann ich Protokolldateien in Python ohne Blockierung überwachen?

Wie kann ich Protokolldateien in Python ohne Blockierung überwachen?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-16 19:58:03145Durchsuche

How to Tail Log Files in Python Without Blocking?

Tailing von Protokolldateien in Python

F: Gibt es eine nicht blockierende oder sperrende Möglichkeit, eine Protokolldatei in Python zu verfolgen, ähnlich wie der Befehl tail -F? Obwohl es eine ältere Methode gibt, gibt es eine bessere Lösung oder Bibliothek?

A: Nicht blockierend:

Unter Linux bietet die Verwendung des Unterprozesses und der ausgewählten Module eine Nicht blockierende Lösung:

import time
import subprocess
import select

f = subprocess.Popen(['tail','-F',filename],\
        stdout=subprocess.PIPE,stderr=subprocess.PIPE)
p = select.poll()
p.register(f.stdout)

while True:
    if p.poll(1):
        print f.stdout.readline()
    time.sleep(1)

Diese Lösung fragt die Ausgabepipe nach neuen Daten ab und zeigt diese sofort an. Sie können time.sleep(1) und print f.stdout.readline() durch benutzerdefinierte Funktionen ersetzen.

Blockierung:

Für einen Blockierungsansatz können Sie verwenden das Unterprozessmodul ohne zusätzliche Module:

import subprocess
f = subprocess.Popen(['tail','-F',filename],\
        stdout=subprocess.PIPE,stderr=subprocess.PIPE)
while True:
    line = f.stdout.readline()
    print line

Diese Methode gibt auch neue Zeilen aus, sobald sie auftauchen, hält jedoch die Ausführung an, bis der Endprozess abgeschlossen ist beendet (z. B. über f.kill()).

Das obige ist der detaillierte Inhalt vonWie kann ich Protokolldateien in Python ohne Blockierung überwachen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn