如何重新定义stderr并stdout出来单独记录?

时间:2012-02-03 15:46:56

标签: python

如何重新定义stderr和stdout以使用日志记录模块单独记录文件?例如stderr.log和stdout.log文件?

2 个答案:

答案 0 :(得分:8)

您只需将sys.stdoutsys.stderr替换为自定义文件类对象:

import sys

sys.stdout = open('stdout.log', 'a')
sys.stderr = open('stderr.log', 'a')

撤消:

sys.stdout = sys.__stdout__
sys.stderr = sys.__stderr__

有关详情,请参阅sys module documentation

答案 1 :(得分:1)

import sys


class OutDevice():
    def write(self, s):
        # do whatever
        pass

class ErrDevice():
    def write(self, s):
        # do whatever
        pass

sys.stdout = OutDevice()  
sys.stdout = ErrDevice()  

# to restore
sys.stdout = sys.__stdout__ 
sys.stderr = sys.__stderr__