From 3451ea0d834a2f55e1aa554b5ff0da848b98827c Mon Sep 17 00:00:00 2001 From: Jan Lindemann Date: Wed, 26 Jul 2017 11:38:38 +0200 Subject: [PATCH] MuteStdIO: Partly support ctor arguments ctor now understands stdio='off' or ='something' and mutes stdout in the first case. Signed-off-by: Jan Lindemann --- tools/python/jwutils/MuteStdIO.py | 49 +++++++++++++++++-------------- 1 file changed, 27 insertions(+), 22 deletions(-) diff --git a/tools/python/jwutils/MuteStdIO.py b/tools/python/jwutils/MuteStdIO.py index 66b91b9..f546aec 100644 --- a/tools/python/jwutils/MuteStdIO.py +++ b/tools/python/jwutils/MuteStdIO.py @@ -7,30 +7,35 @@ from fcntl import fcntl, F_GETFL, F_SETFL class MuteStdIO: # export - def __init__(self, mute_stderr=False, mute_stdout=True): - # TODO: arguments not implemented + def __init__(self, stderr='on', stdout='off'): + self.__stderr = stderr + self.__stdout = stdout + # TODO: arguments not fully implemented, + # Add support for 'off', 'on', 'stdxxx' (redirection) pass def __enter__(self): - rfd, wfd = os.pipe() - flags = fcntl(rfd, F_GETFL) - fcntl(rfd, F_SETFL, flags | os.O_NONBLOCK) - self.rfile = io.open(rfd, 'r') - self.fake_stdout_stream = io.open(wfd, 'w') - self.real_stdout_fd = os.dup(1) - #os.close(1) - os.dup2(wfd, 1) + if self.__stdout == 'off': + rfd, wfd = os.pipe() + flags = fcntl(rfd, F_GETFL) + fcntl(rfd, F_SETFL, flags | os.O_NONBLOCK) + self.rfile = io.open(rfd, 'r') + self.fake_stdout_stream = io.open(wfd, 'w') + self.real_stdout_fd = os.dup(1) + #os.close(1) + os.dup2(wfd, 1) def __exit__(self, type, value, traceback): - sys.stdout.flush() - os.dup2(self.real_stdout_fd, 1) - if type is not None: - #print("-------- Error while stdio was suppressed --------") - #traceback.print_stack() - #print(traceback) - print("-------- Captured output --------") - print(*self.rfile.readlines()) - self.rfile.close() - #print('type = ' + str(type)) - #print('value = ' + str(value)) - raise type(value) + if self.__stdout == 'off': + sys.stdout.flush() + os.dup2(self.real_stdout_fd, 1) + if type is not None: + #print("-------- Error while stdio was suppressed --------") + #traceback.print_stack() + #print(traceback) + print("-------- Captured output --------") + print(*self.rfile.readlines()) + self.rfile.close() + #print('type = ' + str(type)) + #print('value = ' + str(value)) + raise type(value)