diff --git a/lib/luatest_server.py b/lib/luatest_server.py index 0793601d..0a19fb11 100644 --- a/lib/luatest_server.py +++ b/lib/luatest_server.py @@ -14,6 +14,7 @@ from lib.tarantool_server import Test from lib.tarantool_server import TestExecutionError from lib.tarantool_server import TarantoolServer +from lib.utils import captured_stderr def timeout_handler(process, test_timeout): @@ -62,7 +63,8 @@ def execute(self, server): project_dir = os.environ['SOURCEDIR'] with open(server.logfile, 'ab') as f: - proc = Popen(command, cwd=project_dir, stdout=sys.stdout, stderr=f) + with captured_stderr(f): + proc = Popen(command, cwd=project_dir, stdout=sys.stdout, stderr=f) sampler.register_process(proc.pid, self.id, server.name) test_timeout = Options().args.test_timeout timer = Timer(test_timeout, timeout_handler, (proc, test_timeout)) diff --git a/lib/options.py b/lib/options.py index 12021b35..c9cb0fb5 100644 --- a/lib/options.py +++ b/lib/options.py @@ -124,9 +124,9 @@ def __init__(self): """)) parser.add_argument( - "--verbose", + "-v", "--verbose", dest='is_verbose', - action="store_true", + action='store_true', default=False, help=format_help( """ @@ -135,6 +135,18 @@ def __init__(self): Default: false. """)) + parser.add_argument( + "-c", "--show-capture", + dest='show_capture', + action='store_true', + default=False, + help=format_help( + """ + Whether to show captured TAP13 output or not. + + Default: false. + """)) + parser.add_argument( '--debug', dest='debug', diff --git a/lib/utils.py b/lib/utils.py index 03423768..9a79cca9 100644 --- a/lib/utils.py +++ b/lib/utils.py @@ -372,3 +372,23 @@ def prepend_path(p): def shlex_quote(s): return _shlex_quote(s) + + +class captured_stderr: + def __init__(self, logfile): + self.prevfd = None + self.prev = None + self.f = logfile + + def __enter__(self): + self.prevfde = os.dup(self.f.fileno()) + + os.dup2(sys.stderr.fileno(), self.f.fileno()) + + self.preve = sys.stderr + sys.stderr = os.fdopen(self.prevfde, "w") + return self.f + + def __exit__(self, exc_type, exc_value, traceback): + os.dup2(self.prevfde, self.preve.fileno()) + sys.stderr = self.preve