From 85fceb71d4dd1702ef7bb48c13b54a42e2e0e5ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Diemer?= <stephane.diemer@ubicast.eu> Date: Thu, 26 Jan 2017 09:49:43 +0100 Subject: [PATCH] Changed output management (refs #19907). --- 4.Postfix/0_setup.py | 3 +-- tester.py | 11 ++++++++--- utils.py | 29 ++++++++++++++++------------- 3 files changed, 25 insertions(+), 18 deletions(-) diff --git a/4.Postfix/0_setup.py b/4.Postfix/0_setup.py index 68779a15..67589d1d 100644 --- a/4.Postfix/0_setup.py +++ b/4.Postfix/0_setup.py @@ -6,9 +6,8 @@ import utils def setup(interactive=True): # Get hostname utils.log('Getting system hostname.') - code, out = utils.exec_cmd(['hostname']) + code, hostname = utils.exec_cmd('hostname') if code == 0: - hostname = out utils.log('Hostname is %s.' % hostname) else: raise Exception('Failed to get hostname.') diff --git a/tester.py b/tester.py index 2d4e75e6..a28f21d1 100755 --- a/tester.py +++ b/tester.py @@ -118,9 +118,14 @@ class Tester(): description = self.get_file_description(test_path) # Run test try: - code, out = utils.exec_cmd(test_path) - if code != 0: - raise Exception('Command exited with code %s.' % code) + p = subprocess.Popen([test_path], stdin=sys.stdin, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + out, err = p.communicate() + if out: + log(out.decode('utf-8').strip()) + if err: + log(err.decode('utf-8').strip()) + if p.returncode != 0: + raise Exception('Command exited with code %s.' % p.returncode) except Exception as e: exit_code = 1 log(e) diff --git a/utils.py b/utils.py index cb47cc13..1e71079a 100644 --- a/utils.py +++ b/utils.py @@ -21,23 +21,26 @@ def get_dir(file_path): return os.path.dirname(os.path.abspath(os.path.expanduser(file_path))) -def exec_cmd(cmd, log_output=True): +def exec_cmd(cmd, log_output=True, get_output=True): shell = not isinstance(cmd, (tuple, list)) - p = subprocess.Popen(cmd, stdin=sys.stdin, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=shell) + stdout = subprocess.PIPE if get_output or not log_output else sys.stdout + stderr = subprocess.PIPE if get_output or not log_output else sys.stderr + p = subprocess.Popen(cmd, stdin=sys.stdin, stdout=stdout, stderr=stderr, shell=shell) out, err = p.communicate() - out = out.decode('utf-8').strip() if out else '' - if err: - if out: - out += '\n' - out += err.decode('utf-8').strip() - out = out.strip() - if log_output: - log(out) + if get_output: + out = out.decode('utf-8').strip() if out else '' + if err: + if out: + out += '\n' + out += err.decode('utf-8').strip() + out = out.strip() + if log_output: + log(out) return p.returncode, out -def check_cmd(cmd): - code, out = exec_cmd(cmd, log_output=False) +def check_cmd(cmd, log_output=False): + code, out = exec_cmd(cmd, log_output, False) return code @@ -136,7 +139,7 @@ def run_commands(cmds): log('A backup file already exist for:\n%s' % cmd['target']) else: log('>>> ' + cmd['line']) - code = check_cmd(cmd['line']) + code = check_cmd(cmd['line'], log_output=True) if code != 0: raise Exception('Command exited with code %s.' % code) except Exception as e: -- GitLab