gpt4 book ai didi

python - 如何使用 import 语句覆盖 python 内置函数?

转载 作者:行者123 更新时间:2023-12-01 05:55:51 25 4
gpt4 key购买 nike

我想将打印sys.stdout的任何内容记录到一个文本文件。虽然我知道更聪明的人可以想出更优雅和 Pythonic 的解决方案,但这是我的解决方案

class logger:

def __init__(self, filename='log.txt'):
self.logf = open(filename, 'a')

global print
self.__print = print

print = self.lognprint

def __del__(self):
self.logf.close()

def lognprint(self, *args, **keywords):
self.__print(*args, file = self.logf, **keywords)
self.__print(*args, **keywords)

现在,如果我在代码中的任何地方添加

mylog = logger()

之后打印的任何内容也会被记录。

但由于许多明显的原因,这是安全/良好的。例如,多个 logger 对象可能会很糟糕。

此外,我的灵感来自于

from __future__ import print_function

(例如,请参阅 this )并且我想做类似的事情,以便当我导入我的模块时,内置的print被我的版本覆盖打印代码中的任意位置。

这怎么可能?

最佳答案

logging cookbook 中给出了类似的解决方案,或者将内容记录到文件中,该文件也打印到 std.out .
以下是如何简单地将内容记录到名为“spam.log”的文件中并将某些内容打印到 std.out:

import logging

logger = logging.getLogger('simple_example')
logger.setLevel(logging.DEBUG)
# create file handler which logs even debug messages
fh = logging.FileHandler('spam.log')
fh.setLevel(logging.DEBUG)
# create console handler with a higher log level
ch = logging.StreamHandler()
ch.setLevel(logging.ERROR)
# create formatter and add it to the handlers
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
ch.setFormatter(formatter)
fh.setFormatter(formatter)
# add the handlers to logger
logger.addHandler(ch)
logger.addHandler(fh)

# 'application' code
logger.debug('debug message')
logger.info('info message')
logger.warn('warn message')
logger.error('error message')
logger.critical('critical message')

在此示例中,所有消息都会发送到文件,只有更高级别的消息才会发送到控制台。

关于python - 如何使用 import 语句覆盖 python 内置函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12609705/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com