我想登录到一个文本文件,无论是print
编辑sys.stdout
。虽然我明白聪明的人能拿出更优雅和Python的解决方案,这是我的解决方案如何用导入语句覆盖python builtins?
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
ED事后也记录。
但很多明显的原因,这是不是安全/良好。例如多个logger
对象可能是讨厌的。
另外我对
from __future__ import print_function
启发(见this例如),我想要做类似的事情,所以,当我import
我的模块,内建print
是我的版本打印的任何地方覆盖在代码中。
这怎么可能?
请告诉我你用这个来记录你不能**改变的第三方程序的'print'输出。如果不是(==如果它是你自己的使用'print'的代码):改变它使用[logging](http://docs.python.org/library/logging.html)模块。 –
您总是可以通过'__builtins __。print'引用内置的打印功能。无需在新变量中捕获它。 –
@LukasGraf'我正在使用它来从第三方程序'打印'输出,我**不能**改变',_tell我你想听到什么_ –