Heim  >  Artikel  >  Backend-Entwicklung  >  So verwenden Sie den Python3-Echtzeitbetrieb zum Verarbeiten von Protokolldateien

So verwenden Sie den Python3-Echtzeitbetrieb zum Verarbeiten von Protokolldateien

PHPz
PHPznach vorne
2023-04-20 15:01:061272Durchsuche

1. Einfache Echtzeit-Dateiverarbeitung (einzelne Datei)

Angenommen, der Pfad des Protokolls, das wir in Echtzeit lesen möchten, ist: /data/mongodb/shard1/log/pg.csv

Dann können wir das verwenden Shell-Skript in der Python-Datei. Befehl tail -F für Echtzeit-Lesen und -Betrieb. Der Code lautet wie folgt: /output/error-Pipes und rufen Sie deren Rückgabecode (Status) ab.

Einführung in subprocess.Popen

Diese Klasse wird verwendet, um eine Unterroutine in einem neuen Prozess auszuführen.

Konstruktor von subprocess.Popen

import re
import codecs
import subprocess
 
def pg_data_to_elk():
    p = subprocess.Popen('tail -F /data/mongodb/shard1/log/pg.csv', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE,)    #起一个进程,执行shell命令
    while True:
        line = p.stdout.readline()   #实时获取行
        if line:                     #如果行存在的话
            xxxxxxxxxxxx
            your operation

Parameterbeschreibung:

args: Der auszuführende Shell-Befehl kann eine Zeichenfolge oder eine Sequenz sein, die aus jedem Parameter des Befehls besteht. Wenn der Wert dieses Parameters eine Zeichenfolge ist, ist der Interpretationsprozess des Befehls plattformabhängig. Daher wird im Allgemeinen empfohlen, den Parameter args als Sequenz zu übergeben.

    stdin, stdout, stderr: stellen die Standardeingabe-, -ausgabe- und -fehlerhandles des Programms dar.
  • shell: Mit diesem Parameter wird angegeben, ob die Shell als auszuführendes Programm verwendet werden soll. Wenn der Shell-Wert True ist, wird empfohlen, den args-Parameter als Zeichenfolge und nicht als Sequenz zu übergeben.
  • 2. Komplexe Echtzeit-Dateiverarbeitung (kontinuierliche Generierung neuer Dateien)
  • Wenn das Protokoll eine neue Protokolldatei generiert, wenn bestimmte Bedingungen erfüllt sind, z. B. log1.csv hat 20 MB erreicht, dann wird log2.csv dies tun Es gibt wahrscheinlich mehr als 1.000 Dateien pro Tag, und es werden ständig neue generiert. Wie kann man sie also in Echtzeit abrufen?

  • Die Idee ist wie folgt:

Fügen Sie die Größenbestimmung der aktuellen Datei zur Echtzeitüberwachung hinzu (Tail -F). Wenn die aktuelle Dateigröße größer als 20 MB ist, verlassen Sie die Echtzeitüberwachung und rufen Sie eine neue ab Protokolldateien. (Dies ist die gleiche Idee, wenn es andere Beurteilungsbedingungen gibt, aber ersetzen Sie die Beurteilung der aktuellen Dateigröße durch die Beurteilung, die Sie benötigen.)

Der Code lautet wie folgt:

class subprocess.Popen(args, bufsize=-1, executable=None, stdin=None, stdout=None, stderr=None, 
    preexec_fn=None, close_fds=True, shell=False, cwd=None, env=None, universal_newlines=False,
    startup_info=None, creationflags=0, restore_signals=True, start_new_session=False, pass_fds=())

Das obige ist der detaillierte Inhalt vonSo verwenden Sie den Python3-Echtzeitbetrieb zum Verarbeiten von Protokolldateien. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen