在python中,是否可以将sys.stderr重定向到类实例的方法?尝试过并且未能将标准日志记录模块与多处理模块结合使用后,我已经尝试编写自己的自定义记录器。虽然这可能是一个糟糕的选择,但我只需要基本的日志记录功能,无休止的序列化错误让我发疯。总之,我喜欢做类似的事情,
import sys
class TestClass():
def test_method(msg):
acquire threading lock and write to file
logger = TestClass()
sys.stderr = logger.test_method
可以这样做吗?
答案 0 :(得分:1)
任何类似文件的对象都可以用作stderr
- 它甚至不需要从file
派生,主要只需要write()
方法。基本上,您只需将test_method
命名为write
并将sys.stderr
分配给logger
而不是logger.test_method
。您可能还想实施flush()
,可能什么都不做。
class TestClass():
def write(msg):
# acquire threading lock and write to file
def flush():
pass
logger = TestClass()
sys.stderr = logger
您还可以实现__enter__
和__exit__
方法,使您的类作为上下文管理器工作,尤其是在需要清理时(例如,将stderr
恢复到常用文件)。 / p>