diff --git a/4.Postfix/0_setup.py b/4.Postfix/0_setup.py index 68779a15ea95be54441668e2adfcfd5d5099d1d0..67589d1dc10aa16625e1ab45d87f13a9a769069c 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 2d4e75e64222971d9a070ab6446755e19c8f92d9..a28f21d13ba95851dcdb8e303c7d42aaacac4588 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 cb47cc1349163654d23701c421e40187ded90aa3..1e71079a51efa39938cc7c7fc5f3b9c2766e85ca 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: