全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 python论坛
5285 1
2021-12-13
小白使用rotator函数出现__init__() missing 1 required positional argument: 'handler'错误,请问应该怎么处理?
'''Our rotator classes'''

import re
import sys
import signal
import logging
import logging.handlers


class Rotator(object):
    '''Base class for all rotators'''
    def __init__(self, handler, fin=sys.stdin):
        self.fin = fin
        # Set up the level and formatter
        self.handler = handler
        self.handler.setFormatter(logging.Formatter('%(message)s'))
        self.handler.setLevel(logging.DEBUG)

        # Attach it to the logger
        self.logger = logging.getLogger('rotator')
        self.logger.addHandler(self.handler)
        self.logger.setLevel(logging.DEBUG)

    def reopen(self, handler):
        '''Replace our existing handler with this new one'''
        # This /could/ result in duplicate records, though it's unlikely. It's
        # also preferred to missing records
        self.logger.addHandler(handler)
        self.logger.removeHandler(self.handler)
        self.handler = handler

    def lines(self, buffered=False):
        '''Generator for all the lines from stdin'''
        while True:
            try:
                if buffered:
                    for line in self.fin:
                        yield line.strip('\n')
                    # When we're done yielding lines, break
                    break
                else:
                    line = self.fin.readline()
                    while line:
                        yield line.strip('\n')
                        line = self.fin.readline()
                    # When we're done reading lines, break
                    break
            except IOError as exc:  # pragma: no cover
                print('Warning: %s'% exc)

    def run(self, buffered=False):
        '''Repeat lines from stdin to the logger'''
        for line in self.lines(buffered):
            self.logger.debug(line)


class Watched(Rotator):
    '''Watched file handler'''
    def __init__(self, path, mode='a', fin=sys.stdin):
        Rotator.__init__(
            self, logging.handlers.WatchedFileHandler(path, mode), fin)


class Signaled(Rotator):
    '''Signaled handler'''
    def __init__(self, path, mode='a', sig='HUP', fin=sys.stdin):
        if not hasattr(signal, 'SIG' + sig):
            raise ValueError('No such signal SIG%s' % sig)
        self.signal = getattr(signal, 'SIG' + sig)
        self.path = path
        Rotator.__init__(self, logging.FileHandler(path, mode))

    def handle(self, signum, frame):
        '''Rotate our file'''
        self.reopen(logging.FileHandler(self.path))

    def run(self, *args, **kwargs):
        '''Repeat lines from stdin to the logger'''
        signal.signal(self.signal, self.handle)
        Rotator.run(self, *args, **kwargs)


class Rotated(Rotator):
    '''Self-rotating handler'''
    def __init__(self, path, mode='a', size=None, count=None, fin=sys.stdin):
        size = self.parse_size(str(size or 0))
        count = count or 5
        Rotator.__init__(self,
            logging.handlers.RotatingFileHandler(path, mode, size, count), fin)

    @classmethod
    def parse_size(cls, size):
        '''Return a size in bytes'''
        regex = r'\s*(\d+)\s*([kKmMgG][bB])?\s*$'
        match = re.match(regex, size)
        if not match:
            raise ValueError('%s does not match %s' % (regex, size))
        size = int(match.group(1))
        units = match.group(2)
        if not units:
            return size
        if units.lower() == 'kb':
            return size * 1024
        elif units.lower() == 'mb':
            return size *  1024 * 1024
        elif units.lower() == 'gb':
            return size * 1024 * 1024 * 1024


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2022-3-14 10:25:35
感觉实在继承的时候,你的初始化函数中的参数handler未赋值
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群