Home >Backend Development >Python Tutorial >How Can I Duplicate Python\'s sys.stdout to a Log File Without Modifying My Code?
Duplicating sys.stdout to a Log File
In Python, duplicating sys.stdout to a log file can provide a non-invasive solution for logging without modifying the application's code. Here's how to accomplish this:
In interactive mode, when you want output to be both displayed on the screen and written to a log file, you can revert the logic used in daemon mode. Instead of redirecting stdout and stderr, duplicate them using os.dup2.
The code below demonstrates this:
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())
This approach allows you to log all output, including output from system calls, without changing the code.
Alternatively, you can leverage the Tee class from the provided snippet:
# Initialize a Tee object, redirecting stdout to a log file tee = Tee("a.log", 'w')
This class ensures that all output is written to both the log file and the standard output, making it a convenient solution for logging in interactive mode without modifying the application's code.
The above is the detailed content of How Can I Duplicate Python\'s sys.stdout to a Log File Without Modifying My Code?. For more information, please follow other related articles on the PHP Chinese website!