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

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

Susan Sarandon
Release: 2024-11-29 08:24:14
Original
241 people have browsed it

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

Redirecting and Duplicating Output to a Log File

You aspire to achieve the functionality of the command line 'tee' utility, where all output generated by your Python application, including system call output, is duplicated to a log file.

Redirection

Your initial approach involved duplicating the file descriptors of sys.stdout and sys.stderr to the log file, which successfully redirects output to the log in daemon mode. However, this method falls short in interactive mode as it hinders the concurrent display of output on the screen.

Duplication

To achieve duplication, simply reversing the dup2 calls is not sufficient. Instead, you can employ a technique that intercepts sys.stdout and duplicates the written data to both the screen and the log file.

Solution

The snippet below provides an elegant solution:

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()
Copy after login

This class encapsulates the file descriptor duplication and offers a seamless way to write to both sys.stdout and the log file. You can initialize an instance of Tee and pass in the log file details as arguments. The instance then becomes the new sys.stdout.

Conclusion

By using this method, you can achieve both redirection (in daemon mode) and duplication (in interactive mode) of all application output, including system call output, to a log file.

The above is the detailed content of How Can I Duplicate Python Application Output (Including System Calls) to Both the Console and a Log File?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template