def test_level(self): with LoggerCapture(log, level=logging.INFO) as capturer, LoggerCapture(): log.debug('Hidden') log.info('Printed 1') log.warn('Printed 2') self.assertEqual(capturer.log.getvalue(), 'Printed 1\nPrinted 2\n')
def test_basic(self): with OutputCapture() as capturer: log.info('Hidden') log.warn('Printed') sys.stdout.write('stdout\n') sys.stderr.write('stderr\n') self.assertEqual(capturer.webkitcorepy.log.getvalue(), 'Printed\n') self.assertEqual(capturer.stdout.getvalue(), 'stdout\n') self.assertEqual(capturer.stderr.getvalue(), 'stderr\n')
def test_multiple_entry(self): with OutputCapture() as captured: sys.stdout.write('Line 1\n') log.warn('Log 1') with captured: sys.stdout.write('Line 2\n') log.warn('Log 2') self.assertEqual(captured.webkitcorepy.log.getvalue(), 'Log 1\nLog 2\n') self.assertEqual(captured.stdout.getvalue(), 'Line 1\nLine 2\n')
def __exit__(self, *args, **kwargs): if not self.queue: TaskPool.Process.working = False try: if self._teardown_args[0]: self._teardown_args[0](*self._teardown_args[1], **self._teardown_args[2]) finally: TaskPool.Process.queue = None TaskPool.Process.name = None return from six import reraise try: inflight = sys.exc_info() for worker in self.workers: if worker.is_alive(): worker.terminate() with Timeout(seconds=self.grace_period): try: while self._started: self.queue.receive()(self) except Exception: if inflight[1]: log.critical( 'Some workers failed to gracefully shut down, but in-flight exception taking precedence' ) reraise(*inflight) raise self.Exception( 'Some workers failed to gracefully shut down') finally: for worker in self.workers: if not worker.is_alive(): continue if sys.version_info >= (3, 7): worker.kill() elif hasattr(signal, 'SIGKILL'): try: os.kill(worker.pid, signal.SIGKILL) except OSError as e: log.warn('Failed to terminate worker ' + str(worker.pid) + ' with error ' + str(e)) else: worker.terminate() self.queue.close() self.queue = None self.workers = []
def __init__(self, args, bufsize=None, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=True, shell=False, cwd=None, env=None, universal_newlines=None, startupinfo=None, creationflags=0, restore_signals=True, start_new_session=False, pass_fds=(), encoding=None, errors=None, text=None): super(Popen, self).__init__(args, bufsize=bufsize, cwd=cwd, stdin=stdin, stdout=stdout, stderr=stderr) if pass_fds and not close_fds: log.warn("pass_fds overriding close_fds.") for arg in args: if not isinstance(arg, (str, bytes, os.PathLike)): raise TypeError( 'expected {}, {} or os.PathLike object, not {}', str, bytes, type(arg), ) self.args = args self.encoding = encoding self.errors = errors if (text is not None and universal_newlines is not None and bool(universal_newlines) != bool(text)): raise subprocess.SubprocessError( 'Cannot disambiguate when both text and universal_newlines are supplied but different. Pass one or the other.' ) self.text_mode = encoding or errors or text or universal_newlines if self.stdin is not None and self.text_mode: self.stdin = io.TextIOWrapper(self.stdin, write_through=True, line_buffering=(bufsize == 1), encoding=encoding, errors=errors) if self.stdout is not None and self.text_mode: self.stdout = io.TextIOWrapper(self.stdout, encoding=encoding, errors=errors) self._stdout_type = str if self.stderr is not None and self.text_mode: self.stderr = io.TextIOWrapper(self.stderr, encoding=encoding, errors=errors) self._stderr_type = str
def test_basic(self): with LoggerCapture(log) as capturer, LoggerCapture(): log.info('Hidden') log.warn('Printed') self.assertEqual(capturer.log.getvalue(), 'Printed\n')