Heim > Backend-Entwicklung > Python-Tutorial > Wie kann ich die Ausgabe einer Python-Anwendung (einschließlich Systemaufrufen) sowohl in die Konsole als auch in eine Protokolldatei duplizieren?

Wie kann ich die Ausgabe einer Python-Anwendung (einschließlich Systemaufrufen) sowohl in die Konsole als auch in eine Protokolldatei duplizieren?

Susan Sarandon
Freigeben: 2024-11-29 08:24:14
Original
339 Leute haben es durchsucht

How Can I Duplicate Python Application Output (Including System Calls) to Both the Console and a Log File?

Umleiten und Duplizieren der Ausgabe in eine Protokolldatei

Sie streben danach, die Funktionalität des Befehlszeilen-Dienstprogramms „tee“ zu erreichen, wo alle Ausgaben erfolgen Die von Ihrer Python-Anwendung generierten Daten, einschließlich der Systemaufrufausgabe, werden in einem Protokoll dupliziert Datei.

Umleitung

Ihr erster Ansatz bestand darin, die Dateideskriptoren von sys.stdout und sys.stderr in die Protokolldatei zu duplizieren, wodurch die Ausgabe erfolgreich an die Anmeldung umgeleitet wird Daemon-Modus. Allerdings ist diese Methode im interaktiven Modus unzureichend, da sie die gleichzeitige Anzeige der Ausgabe auf dem Bildschirm behindert.

Duplizierung

Um eine Duplizierung zu erreichen, reicht es aus, die dup2-Aufrufe einfach umzukehren nicht ausreichend. Stattdessen können Sie eine Technik anwenden, die sys.stdout abfängt und die geschriebenen Daten sowohl auf dem Bildschirm als auch in der Protokolldatei dupliziert.

Lösung

Das folgende Snippet bietet eine elegante Lösung:

class Tee(object):
    def __init__(self, name, mode):
        self.file = open(name, mode)
        self.stdout = sys.stdout
        sys.stdout = self
    def __del__(self):
        sys.stdout = self.stdout
        self.file.close()
    def write(self, data):
        self.file.write(data)
        self.stdout.write(data)
    def flush(self):
        self.file.flush()
Nach dem Login kopieren

Diese Klasse kapselt die Duplizierung von Dateideskriptoren und bietet eine nahtlose Möglichkeit, in beide zu schreiben sys.stdout und die Protokolldatei. Sie können eine Instanz von Tee initialisieren und die Protokolldateidetails als Argumente übergeben. Die Instanz wird dann zur neuen sys.stdout.

Fazit

Mit dieser Methode können Sie sowohl eine Umleitung (im Daemon-Modus) als auch eine Duplizierung (im interaktiven Modus) erreichen ) aller Anwendungsausgaben, einschließlich Systemaufrufausgaben, in eine Protokolldatei.

Das obige ist der detaillierte Inhalt vonWie kann ich die Ausgabe einer Python-Anwendung (einschließlich Systemaufrufen) sowohl in die Konsole als auch in eine Protokolldatei duplizieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage