예제 #1
0
def test_fd_tee_output(capsys):
    expected_lines = {
        "captured stdout", "captured stderr", "stdout from C",
        "and this is from echo"
    }

    capture_mode, capture_stdout = get_stdcapturer("fd")
    output = ""
    with capsys.disabled():
        print('before (stdout)')
        print('before (stderr)')
        with capture_stdout() as out:
            print("captured stdout")
            print("captured stderr")
            output += out.get()
            libc.puts(b'stdout from C')
            libc.fflush(None)
            os.system('echo and this is from echo')
            output += out.get()

        output += out.get()

        print('after (stdout)')
        print('after (stderr)')

        assert set(output.strip().split("\n")) == expected_lines
예제 #2
0
def test_fd_tee_output(capsys):
    expected_lines = {
        "captured stdout",
        "captured stderr",
        "stdout from C",
        "and this is from echo"}

    capture_mode, capture_stdout = get_stdcapturer("fd")
    output = ""
    with capsys.disabled():
        print('before (stdout)')
        print('before (stderr)')
        with capture_stdout() as out:
            print("captured stdout")
            print("captured stderr", file=sys.stderr)
            output += out.get()
            libc.puts(b'stdout from C')
            libc.fflush(None)
            os.system('echo and this is from echo')
            output += out.get()

        output += out.get()

        print('after (stdout)')
        print('after (stderr)')

        assert set(output.strip().split("\n")) == expected_lines
예제 #3
0
def test_fd_tee_output(capsys):
    expected_lines = {
        "captured stdout",
        "captured stderr",
        "stdout from C",
        "and this is from echo",
        "keep\rcarriage\rreturns",
    }

    capture_mode, capture_stdout = get_stdcapturer("fd")
    output = ""
    with capsys.disabled():
        print("before (stdout)")
        print("before (stderr)")
        with capture_stdout() as out:
            print("captured stdout")
            print("captured stderr", file=sys.stderr)
            print("keep\rcarriage\rreturns")
            output += out.get()
            libc.puts(b"stdout from C")
            libc.fflush(None)
            os.system("echo and this is from echo")
            output += out.get()

        output += out.get()

        print("after (stdout)")
        print("after (stderr)")

        assert set(output.strip().split("\n")) == expected_lines
예제 #4
0
def test_python_tee_output(capsys):
    expected_lines = {"captured stdout", "captured stderr"}

    capture_mode, capture_stdout = get_stdcapturer("sys")
    with capsys.disabled():
        print('before (stdout)')
        print('before (stderr)')
        with capture_stdout() as out:
            print("captured stdout")
            print("captured stderr")
        output = out.get()

        print('after (stdout)')
        print('after (stderr)')

        assert set(output.strip().split("\n")) == expected_lines
예제 #5
0
def test_python_tee_output(capsys):
    expected_lines = {
        "captured stdout",
        "captured stderr"}

    capture_mode, capture_stdout = get_stdcapturer("sys")
    with capsys.disabled():
        print('before (stdout)')
        print('before (stderr)')
        with capture_stdout() as out:
            print("captured stdout")
            print("captured stderr")
        output = out.get()

        print('after (stdout)')
        print('after (stderr)')

        assert set(output.strip().split("\n")) == expected_lines
예제 #6
0
    def __call__(self, *args):
        r"""Start this run.

        Parameters
        ----------
        \*args
            parameters passed to the main function

        Returns
        -------
            the return value of the main function

        """
        if self.start_time is not None:
            raise RuntimeError('A run can only be started once. '
                               '(Last start was {})'.format(self.start_time))

        if self.unobserved:
            self.observers = []
        else:
            self.observers = sorted(self.observers, key=lambda x: -x.priority)

        self.warn_if_unobserved()
        set_global_seed(self.config['seed'])

        if self.capture_mode is None and not self.observers:
            capture_mode = "no"
        else:
            capture_mode = self.capture_mode
        capture_mode, capture_stdout = get_stdcapturer(capture_mode)
        self.run_logger.debug('Using capture mode "%s"', capture_mode)

        if self.queue_only:
            self._emit_queued()
            return
        try:
            with capture_stdout() as self._output_file:
                self._emit_started()
                self._start_heartbeat()
                self._execute_pre_run_hooks()
                self.result = self.main_function(*args)
                self._execute_post_run_hooks()
                if self.result is not None:
                    self.run_logger.info('Result: {}'.format(self.result))
                elapsed_time = self._stop_time()
                self.run_logger.info('Completed after %s', elapsed_time)
                self._get_captured_output()
            self._stop_heartbeat()
            self._emit_completed(self.result)
        except (SacredInterrupt, KeyboardInterrupt) as e:
            self._stop_heartbeat()
            status = getattr(e, 'STATUS', 'INTERRUPTED')
            self._emit_interrupted(status)
            raise
        except Exception:
            exc_type, exc_value, trace = sys.exc_info()
            self._stop_heartbeat()
            self._emit_failed(exc_type, exc_value, trace.tb_next)
            raise
        finally:
            self._warn_about_failed_observers()

        return self.result
예제 #7
0
파일: run.py 프로젝트: elanmart/sacred
    def __call__(self, *args):
        r"""Start this run.

        Parameters
        ----------
        \*args
            parameters passed to the main function

        Returns
        -------
            the return value of the main function

        """
        if self.start_time is not None:
            raise RuntimeError('A run can only be started once. '
                               '(Last start was {})'.format(self.start_time))

        if self.unobserved:
            self.observers = []
        else:
            self.observers = sorted(self.observers, key=lambda x: -x.priority)

        self.warn_if_unobserved()
        set_global_seed(self.config['seed'])

        if self.capture_mode is None and not self.observers:
            capture_mode = "no"
        else:
            capture_mode = self.capture_mode
        capture_mode, capture_stdout = get_stdcapturer(capture_mode)
        self.run_logger.debug('Using capture mode "%s"', capture_mode)

        if self.queue_only:
            self._emit_queued()
            return
        try:
            try:
                with capture_stdout() as out:
                    self._output_file = out
                    self._emit_started()
                    self._start_heartbeat()
                    self._execute_pre_run_hooks()
                    self.result = self.main_function(*args)
                    self._execute_post_run_hooks()
                    if self.result is not None:
                        self.run_logger.info('Result: {}'.format(self.result))
                    elapsed_time = self._stop_time()
                    self.run_logger.info('Completed after %s', elapsed_time)
                    self._get_captured_output()
            finally:
                self._get_captured_output()
            self._stop_heartbeat()
            self._emit_completed(self.result)
        except (SacredInterrupt, KeyboardInterrupt) as e:
            self._stop_heartbeat()
            status = getattr(e, 'STATUS', 'INTERRUPTED')
            self._emit_interrupted(status)
            raise
        except:
            exc_type, exc_value, trace = sys.exc_info()
            self._stop_heartbeat()
            self._emit_failed(exc_type, exc_value, trace.tb_next)
            raise
        finally:
            self._warn_about_failed_observers()

        return self.result