Heim >Backend-Entwicklung >Python-Tutorial >Wie kann ich Pythons sys.stdout in eine Protokolldatei duplizieren, ohne meinen Code zu ändern?

Wie kann ich Pythons sys.stdout in eine Protokolldatei duplizieren, ohne meinen Code zu ändern?

Linda Hamilton
Linda HamiltonOriginal
2024-12-03 10:04:09171Durchsuche

How Can I Duplicate Python's sys.stdout to a Log File Without Modifying My Code?

Duplizieren von sys.stdout in eine Protokolldatei

In Python kann das Duplizieren von sys.stdout in eine Protokolldatei eine nicht-invasive Lösung darstellen für die Protokollierung ohne Änderung des Anwendungscodes. So erreichen Sie dies:

Wenn Sie im interaktiven Modus möchten, dass die Ausgabe sowohl auf dem Bildschirm angezeigt als auch in eine Protokolldatei geschrieben wird, können Sie die im Daemon-Modus verwendete Logik zurücksetzen. Anstatt stdout und stderr umzuleiten, duplizieren Sie sie mit os.dup2.

Der folgende Code zeigt dies:

import os, sys

# Open the log file for writing without buffering
so = se = open("a.log", 'w', 0)

# Duplicate stdout and stderr to the log file
os.dup2(sys.stdout.fileno(), so.fileno())
os.dup2(sys.stderr.fileno(), se.fileno())

Mit diesem Ansatz können Sie alle Ausgaben protokollieren, einschließlich der Ausgaben von Systemaufrufen. ohne den Code zu ändern.

Alternativ können Sie die Tee-Klasse aus den bereitgestellten nutzen Snippet:

# Initialize a Tee object, redirecting stdout to a log file
tee = Tee("a.log", 'w')

Diese Klasse stellt sicher, dass alle Ausgaben sowohl in die Protokolldatei als auch in die Standardausgabe geschrieben werden, was sie zu einer praktischen Lösung für die Protokollierung im interaktiven Modus macht, ohne den Code der Anwendung zu ändern.

Das obige ist der detaillierte Inhalt vonWie kann ich Pythons sys.stdout in eine Protokolldatei duplizieren, ohne meinen Code zu ändern?. 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