将sys.stderr重定向到类实例的方法?

时间:2016-12-15 05:26:11

标签: python stderr

在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

可以这样做吗?

1 个答案:

答案 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>