[Python] Use Python's logging to overwriting previous console line

Discussão em 'Python' iniciado por Stack, Dezembro 19, 2024.

  1. Stack

    Stack Membro Participativo

    I want to use Python's logging library to overwrite the previous console line. It should display ... on the console while the process is running, then overwrite it with OK once the process completes, as shown in this Python code.

    import time

    for i in range(10):
    print(f'Progress: {i+1}/10 ...', end='')
    time.sleep(1)
    print(f'\rProgress: {i+1}/10 OK')


    [​IMG]

    I want to achieve the same result using the logging library, but my current solution feels too verbose and un-pythonic. Does anyone have a better approach? Thanks!

    import logging
    import sys
    import time

    class OverwriteStreamHandler(logging.StreamHandler):
    def __init__(self, stream, overwrite=False):
    super().__init__(stream)
    self.overwrite = overwrite

    def emit(self, record):
    msg = self.format(record)
    stream = self.stream
    if self.overwrite:
    stream.write('\r' + msg)
    else:
    stream.write(msg)
    stream.flush()

    def create_logger(name, overwrite=False):
    handler = OverwriteStreamHandler(sys.stdout, overwrite=overwrite)
    handler.setLevel(logging.DEBUG)
    formatter = logging.Formatter('%(message)s')
    handler.setFormatter(formatter)
    logger = logging.getLogger(name)
    logger.setLevel(logging.DEBUG)
    logger.addHandler(handler)
    return logger

    logger1 = create_logger('logger1')
    logger2 = create_logger('logger2', overwrite=True)

    for i in range(10):
    logger1.info(f'Progress: {i+1}/10 ...')
    time.sleep(1)
    logger2.info(f'Progress: {i+1}/10 Ok\n')

    Continue reading...

Compartilhe esta Página