我想将print
添加到sys.stdout
的文本文件中。虽然我知道聪明的人可以想出更优雅、更具Python式的解决方案,但这是我的解决方案
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)
如果我在代码中添加了
^{pr2}$之后print
的任何内容也将被记录。在
但由于许多明显的原因,这是不安全的。例如,多个logger
对象可能很讨厌。在
此外,我还受到
from __future__ import print_function
(例如,请参见this)并且我想做类似的事情,这样当我import
我的模块时,内置的print
会被我在代码中的任何地方的print版本覆盖。在
怎么可能?在
不要将代码放在类中,而是将其放在模块级别。这样,它将在第一次导入模块时执行:
一个类似的解决方案,或者将数据记录到一个文件中,该文件还可以打印到标准输出,在logging cookbook中给出。
下面是如何简单地将内容记录到名为'垃圾邮件.log'还可以将某些东西打印到标准输出公司名称:
在这个例子中,所有的消息都转到文件,只有更高级别的消息转到控制台。在
相关问题 更多 >
编程相关推荐