我想登錄到一個文本文件,無論是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我你想聽到什麼_ –