我想登录到一个文本文件,无论print
编辑到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()
之后编辑的任何内容print
也会被记录。
但是由于许多明显的原因,这并不安全/好。例如,多个logger
对象可能很讨厌。
此外,我的灵感来自
from __future__ import print_function
(例如,请参阅this)并且我想做类似的事情,这样当我使用我的模块时,我的 print 版本会在代码中的任何位置覆盖import
内置函数。print
这怎么可能?