Best Python code snippet using autotest_python
logging_manager.py
Source:logging_manager.py  
...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)406            return pid407        else: # child408            try:409                os.close(write_end)410                # ensure this subprocess doesn't hold any pipes to others411                os.close(1)412                os.close(2)413                self._run_logging_subprocess(read_end) # never returns414            except:415                # don't let exceptions in the child escape416                try:417                    logging.exception('Logging subprocess died:')418                finally:419                    os._exit(1)420    def _run_logging_subprocess(self, read_fd):421        """422        Always run from a subprocess.  Read from read_fd and write to the423        logging module until EOF.424        """425        signal.signal(signal.SIGTERM, signal.SIG_DFL) # clear handler426        input_file = os.fdopen(read_fd, 'r')427        for line in iter(input_file.readline, ''):428            logging.log(self._level, line.rstrip('\n'))429        logging.debug('Logging subprocess finished')430        os._exit(0)431    def _context_id(self):432        return '%s_context' % id(self)433    def on_push_context(self, context):434        # adds a context dict for this stream, $id_context, with the following:435        # * old_fd: FD holding a copy of the managed FD before launching a new436        #   subprocess.437        # * child_pid: PID of the logging subprocess launched438        fd_copy = os.dup(self._fd)439        child_pid = self._spawn_logging_subprocess()440        my_context = {'old_fd': fd_copy, 'child_pid': child_pid}441        context[self._context_id()] = my_context442    def on_restore_context(self, context):443        my_context = context[self._context_id()]444        # shut down subprocess445        child_pid = my_context['child_pid']446        try:447            os.close(self._fd)448            os.waitpid(child_pid, 0)449        except OSError:450            logging.exception('Failed to cleanly shutdown logging subprocess:')451        # restore previous FD452        old_fd = my_context['old_fd']453        os.dup2(old_fd, self._fd)...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!!
