Aktualisieren Sie die Überwachung von dmesg (/ dev / kmsg) von Python unter Linux

Eine Beispielimplementierung, die Tail-Updates wie "tail -F" auf Protokolle überwacht, die mit "dmesg" überprüft werden können. Der von dmesg ausgegebene Ringpuffer kann als Datei von / dev / kmsg oder / proc / kmsg geöffnet werden. Da es in der letzten Zeile mit "Lesen" blockiert, wird "O_NONBLOCK" nur angegeben, wenn das Überspringen verarbeitet wird.

Implementierung

dmesg(/dev/kmsg)Update-Überwachung


#!/usr/bin/env python2
# cofing: UTF-8

import os
import fcntl
import time

def readLines(path):
    with open(path, "r") as fp:
        stat = os.stat(path)
        fp.seek(stat[6])

        where = None

        # =================
        # seek to last line
        # =================
        fd   = fp.fileno()
        flag = fcntl.fcntl(fd, fcntl.F_GETFL)
        fcntl.fcntl(fd, fcntl.F_SETFL, flag | os.O_NONBLOCK)

        try:
            # FIXME
            for last in fp:
                pass
        except IOError as e:
            if e.errno != 11:
                raise

        fcntl.fcntl(fd, fcntl.F_SETFL, flag)

        # =================
        # tailf impl
        # =================
        try:
            while True:
                where = fp.tell()
                line  = fp.readline()
                yield line
        except KeyboardInterrupt:
            pass

if __name__ == "__main__":
    import sys
    for line in readLines("/dev/kmsg"):
        if str(line).find("stop tailf") >= 0:
            print "### stop watch tailf ###"
            break
        else:
            print line,

Die Ausführung und das Ergebnis sind wie folgt.

Ausführungsergebnis und Ende(Überwachungsseite)


$ ./tailf.py
12,642,9584294872,-;aaa
12,643,9588998703,-;bbb
12,644,9593362017,-;ccc
### stop watch tailf ###

Durch Umleiten nach "/ dev / kmsg" wird die Ausgabe des Treiberprotokolls pseudo bestätigt.

Ausführungsergebnis und Ende(Seitenbeispiel aktualisieren)


$ sudo sh -c "echo aaa > /dev/kmsg"
$ sudo sh -c "echo bbb > /dev/kmsg"
$ sudo sh -c "echo ccc > /dev/kmsg"
$ sudo sh -c "echo stop tailf > /dev/kmsg"

TODO

Ich kannte keinen guten Weg, um mit Python in die letzte Zeile der Datei zu gelangen, also habe ich sie implementiert, indem ich alles bis zur letzten Zeile gelesen habe. Bei einer großen Datei kann das Überspringen sehr lange dauern. (Beim Ändern der Größe des Ringpuffers usw.)

# FIXME
for last in fp:
    pass

Referenz

Emerge-Technologie: Schwanzartig mit Python Ausgabe der Zeile mit der angegebenen Zeichenfolge aus der Textdatei --Qiita python - What is the most efficient way to get first and last line of a text file? - Stack Overflow Get last n lines of a file with Python, similar to tail - Stack Overflow python Non-block read file - Stack Overflow

Recommended Posts

Aktualisieren Sie die Überwachung von dmesg (/ dev / kmsg) von Python unter Linux
Aktualisieren Sie Mac Python von 2 auf 3
Zum Zeitpunkt des Python-Updates mit Ubuntu
Aktualisieren Sie vscode unter Linux
Stellen Sie die neueste Version von Python in Linux (Debian) von Chromebook
Automatisches Update des Python-Moduls
Umgang mit Python auf Mac
Aktualisieren Sie die Python, die Sie auf Ihrem Mac hatten, auf 3.7-> 3.8
Echtzeitanzeige von Videos, die von einer Webkamera auf einem Jupyter-Notebook (Python3) aufgenommen wurden
[Python] Ruft das Aktualisierungsdatum eines Nachrichtenartikels aus HTML ab
Installation von Python, Numpy, Scipy ohne Root-Rechte unter Linux
So aktualisieren Sie die Python-Version von Cloud Shell in GCP
Installieren Sie Python Pillow unter Amazon Linux
Hinweise zur Verwendung von MeCab aus Python
Abschluss des Docker-Befehls unter Linux
Erstellen einer Umgebung für Python3.8 auf einem Mac
Hinweise zum Zugriff auf dashDB über Python
Führen Sie die Python 3.5.2-Umgebung unter Amazon Linux ein
python> os.path.join ('data', 'checkpoint')> 'data / checkpoint' unter Linux
Rufen Sie C / C ++ von Python auf dem Mac auf
Datenintegration von der Python-App unter Linux zu Amazon Redshift mit ODBC
Führen Sie einen Stapel Python 2.7 mit nohup unter Amazon Linux AMI unter EC2 aus
Von der Re-Environment-Konstruktion von Python bis zur grafischen Zeichnung (auf Visual Studio-Code)
Holen Sie sich Tastenanschläge von / dev / input (python evdev)
So aktualisieren Sie Google Sheets von Python
Notizen vom Anfang von Python 1 lernen
Verstopft mit Python-Update der GCP-Konsole ①
[C] [Python] Lesen mit AquesTalk unter Linux
So aktualisieren Sie PHP unter Amazon Linux 2
Grundlegende Verwendung von Btrfs in Arch Linux
Herstellen einer Verbindung von Python zu MySQL unter CentOS 6.4
So aktualisieren Sie die Sicherheit unter CentOS Linux 8
Studie über die Miete in Tokio mit Python (3-1 von 3)
[Amazon Linux] Wechsel von der Python 2-Serie zur Python 3-Serie
[Python] Japanische Lokalisierung von matplotlib unter Ubuntu
Notizen vom Anfang von Python 2 lernen
Installieren Sie Python 3.8, Pip 3.8 auf EC2 (Amazon Linux 2)
Linux-Fehlerbehebung "Install on / dev / sda"