Best Python code snippet using autotest_python
logging_manager.py
Source:logging_manager.py  
...352        super(_FdRedirectionStreamManager, self).__init__(stream, level,353                                                          stream_setter)354        self._fd = stream.fileno()355        self._fd_copy_stream = None356    def _point_stream_handlers_to_copy(self):357        """358        point logging StreamHandlers that point to this stream to a safe359        copy of the underlying FD. otherwise, StreamHandler output will go360        to the logging subprocess, effectively getting doubly logged.361        """362        fd_copy = os.dup(self._fd)363        self._fd_copy_stream = os.fdopen(fd_copy, 'w')364        self._redirect_logging_stream_handlers(self._stream,365                                               self._fd_copy_stream)366    def _restore_stream_handlers(self):367        """ point logging StreamHandlers back to the original FD """368        self._redirect_logging_stream_handlers(self._fd_copy_stream,369                                               self._stream)370        self._fd_copy_stream.close()371    def _redirect_logging_stream_handlers(self, old_stream, new_stream):372        """373        Redirect all configured logging StreamHandlers pointing to374        old_stream to point to new_stream instead.375        """376        for handler in _current_handlers():377            points_to_stream = (isinstance(handler, logging.StreamHandler) and378                                hasattr(handler.stream, 'fileno') and379                                handler.stream.fileno() == old_stream.fileno())380            if points_to_stream:381                logger.removeHandler(handler)382                handler.close() # doesn't close the stream, just the handler383                new_handler = logging.StreamHandler(new_stream)384                new_handler.setLevel(handler.level)385                new_handler.setFormatter(handler.formatter)386                for log_filter in handler.filters:387                    new_handler.addFilter(log_filter)388                logger.addHandler(new_handler)389    def start_logging(self):390        super(_FdRedirectionStreamManager, self).start_logging()391        self._point_stream_handlers_to_copy()392    def stop_logging(self):393        super(_FdRedirectionStreamManager, self).stop_logging()394        self._restore_stream_handlers()395    def _spawn_logging_subprocess(self):396        """397        Spawn a subprocess to log all input to the logging module with the398        current settings, and direct output to it.399        """400        read_end, write_end = os.pipe()401        pid = os.fork()402        if pid: # parent403            os.close(read_end)404            os.dup2(write_end, self._fd) # point FD to the subprocess405            os.close(write_end)...Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!
