Python - Verfolgen Sie eine Protokolldatei und vergleichen Sie blockierende und nicht blockierende Tail-Funktionen
-
Überblick über die Python-Funktion
tail()
- Verfolgen Sie eine Protokolldatei in Python
-
Blockierende vs. nicht blockierende
Tail()
-Funktionen in Python - Protokolldatei für die obigen Beispiele
Das heutige Tutorial bietet einen Überblick über die Funktion tail()
in Python, die zu ihrer Funktionsweise führt, und zeigt, wie man eine Protokolldatei tailt.
Es vergleicht auch die blockierenden und nicht blockierenden Schwanzfunktionen von Python und hebt die Unterschiede hervor.
Überblick über die Python-Funktion tail()
In Python werden die letzten fünf Zeilen des Datenrahmens standardmäßig angezeigt, wenn die Funktion tail()
verwendet wird. Es gibt nur einen Eingabeparameter, nämlich die Anzahl der Zeilen.
Mit dieser Option können wir eine bestimmte Anzahl von Zeilen anzeigen. Darüber hinaus akzeptiert die Funktion tail()
auch eine negative Zahl, wie im folgenden Beispiel gezeigt.
In einer solchen Situation werden alle Zeilen zurückgegeben, aber nicht die ersten Zeilen. Der Hauptunterschied zwischen head()
und tail()
besteht darin, dass head()
und tail()
beide fünf Zeilen zurückgeben, wenn leere Parameter übergeben werden.
Denken Sie daran, dass die Funktionen head()
und tail()
geordnete Daten erzeugen, während sample()
ungeordnete Daten erzeugt.
Syntax der Funktion tail()
:
dataframe.tail(n=5)
Funktionsweise der Tail()
-Funktion in Python
Wenn wir den negativen Wert von n
an die Funktion tail()
übergeben, wird das erste n
ausgeschlossen (siehe folgendes Beispiel).
Wenn wir print(df.tail(2))
ausführen, zeigt es die letzten beiden Zeilen an, und wenn wir print(df.tail(-6))
ausführen, zeigt es alle Zeilen außer den ersten 6 an.
Beispielcode:
import pandas as pd
df = pd.DataFrame(
{
"Colours": [
"Purple",
"White",
"Black",
"Brown",
"Pink",
"Orange",
"Blue",
"Red",
"Yellow",
]
}
)
print("Complete Data Frame:")
print(df)
print("When we pass the value of `n`:")
print(df.tail(2))
print("\nWhen we pass the -ve value of `n`:")
print(df.tail(-6))
Ausgang:
Complete Data Frame:
Colours
0 Purple
1 White
2 Black
3 Brown
4 Pink
5 Orange
6 Blue
7 Red
8 Yellow
When we pass the value of `n`:
Colours
7 Red
8 Yellow
When we pass the -ve value of `n`:
Colours
6 Blue
7 Red
8 Yellow
Verfolgen Sie eine Protokolldatei in Python
Wir haben eine Protokolldatei mit dem Namen std.log
erstellt, in der wir einige Daten gespeichert haben, die wir in der Ausgabe unten sehen werden. Um eine Protokolldatei zu taillen, können wir das tail vom sh
-Modul aus ausführen.
Um eine Endlosschleife auszuführen und die Ausgabezeile anzuzeigen, rufen wir tail()
auf, wobei der Dateiname und _iter
auf True
gesetzt sind.
Beispielcode:
from sh import tail
for line in tail("-f", "std.log", _iter=True):
print(line)
Ausgang:
2022-08-25 21:44:10,045 This is just a reminder
2022-08-25 21:44:10,046 Meeting is at 2 pm
2022-08-25 21:44:10,046 After the lunch break
Blockierende vs. nicht blockierende Tail()
-Funktionen in Python
Beginnen wir mit der nicht blockierenden Funktion tail()
.
Nicht blockierende Tail()
-Funktion
Wenn eine Funktion blockiert ist, kann sie möglicherweise den Abschluss nachfolgender Aktivitäten verzögern. Darüber hinaus können wir die Gesamtleistung des Systems beeinträchtigen.
Mit anderen Worten, Ihr Programm blockiert und verhindert, dass alles andere ausgeführt wird. Um den subprocess
zu starten und sich mit seinem Ausgabestrom zu verbinden, verwenden wir das Modul subprocess
(stdout
).
Beispielcode:
import subprocess
import select
import time
f = subprocess.Popen(
["tail", "-F", "log.txt"], 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)
Ausgang:
b'2022-08-25 21:44:10,045 This is just a reminder\n'
Sperrung der Tail()
-Funktion
Der folgende Code zeigt auch neue Zeilen an, wenn sie hinzugefügt werden, aber Sie können das subprocess
-Modul ohne die zusätzlichen select
-Modulaufrufe verwenden. Es blockiert, bis das Tail-Programm mit dem Befehl f.kill()
beendet wird.
Beispielcode:
import subprocess
f = subprocess.Popen(
["tail", "-F", "log.txt"], stdout=subprocess.PIPE, stderr=subprocess.PIPE
)
while True:
line = f.stdout.readline()
print(line)
Ausgang:
b'2022-08-25 21:44:10,045 This is just a reminder\\n'
b'2022-08-25 21:44:10,046 Meeting is at 2 pm\\n'
Protokolldatei für die obigen Beispiele
Der folgende Code dient zum Erstellen von log.txt
, die dann im blockierenden und nicht blockierenden Code verwendet wird.
Beispielcode:
import logging
logging.basicConfig(filename="log.txt", level=logging.DEBUG,
format="%(asctime)s %(message)s")
logging.debug("This is just a reminder")
logging.info("Meeting is at 2 pm")
logging.info("After the lunch break")
Ausgang:
2022-08-25 21:44:10,045 This is just a reminder
2022-08-25 21:44:10,046 Meeting is at 2 pm
2022-08-25 21:44:10,046 After the lunch break
Zeeshan is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.
LinkedIn