首页 > 后端开发 > Python教程 > 如何将 Python 应用程序输出(包括系统调用)复制到控制台和日志文件?

如何将 Python 应用程序输出(包括系统调用)复制到控制台和日志文件?

Susan Sarandon
发布: 2024-11-29 08:24:14
原创
320 人浏览过

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

将输出重定向并复制到日志文件

您渴望实现命令行“tee”实用程序的功能,其中所有输出由 Python 应用程序生成的数据(包括系统调用输出)会复制到日志中file.

重定向

您最初的方法是将 sys.stdout 和 sys.stderr 的文件描述符复制到日志文件,这成功地将输出重定向到日志守护进程模式。但是,此方法在交互模式下存在不足,因为它阻碍了屏幕上输出的并发显示。

复制

要实现复制,只需反转 dup2 调用即可不够。相反,您可以采用一种技术来拦截 sys.stdout 并将写入的数据复制到屏幕和日志文件。

解决方案

下面的代码片段提供了一个优雅的解决方案:

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()
登录后复制

此类封装了文件描述符重复,并提供了一种无缝的方式来写入两者sys.stdout 和日志文件。您可以初始化 Tee 的实例并将日志文件详细信息作为参数传递。然后该实例就成为新的sys.stdout。

结论

通过使用此方法,可以同时实现重定向(守护进程模式)和复制(交互模式) )将所有应用程序输出(包括系统调用输出)保存到日志文件中。

以上是如何将 Python 应用程序输出(包括系统调用)复制到控制台和日志文件?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板