From 9b8d8fcc9f4f191374f730b13fcb0ce18905864c Mon Sep 17 00:00:00 2001 From: Panagiotis Karalis Date: Tue, 17 Sep 2019 11:55:58 +0300 Subject: Fault fixing for cmd_exec util method When the 'dovetail run' command is assigned, the error "TypeError: must be str, not bytes" is appeared. Due to a different handling of strings in the Python3, this error is appeared during of command execution (i.e. exec_cmd method). Each piece of the string should be decoded, before it will be appended to the rest one. Signed-off-by: Panagiotis Karalis Change-Id: I65629f3f76cc3e44f3926a744d00791ef588d2aa --- dovetail/tests/unit/utils/test_dovetail_utils.py | 7 +++---- dovetail/utils/dovetail_utils.py | 5 +++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/dovetail/tests/unit/utils/test_dovetail_utils.py b/dovetail/tests/unit/utils/test_dovetail_utils.py index 5b403a5c..d912aa84 100644 --- a/dovetail/tests/unit/utils/test_dovetail_utils.py +++ b/dovetail/tests/unit/utils/test_dovetail_utils.py @@ -1233,9 +1233,9 @@ class DovetailUtilsTesting(unittest.TestCase): subp_stdout = Mock() subprocess_obj.stdout = subp_stdout subprocess_obj.wait.return_value = 0 - subp_stdout.readline.side_effect = [cmd_output, ''] + subp_stdout.readline.side_effect = [cmd_output.encode()] - expected = (0, 'line') + expected = (0, "b'line'") result = dovetail_utils.exec_cmd( cmd, logger=logger, exit_on_error=True, info=False, exec_msg_on=True, err_msg='', verbose=verbose, @@ -1276,7 +1276,7 @@ class DovetailUtilsTesting(unittest.TestCase): subp_stdout = Mock() subprocess_obj.stdout = subp_stdout subprocess_obj.wait.return_value = 1 - subp_stdout.readline.side_effect = [cmd_output, ''] + subp_stdout.readline.side_effect = [cmd_output.encode()] dovetail_utils.exec_cmd( cmd, logger=logger, exit_on_error=True, info=False, @@ -1286,7 +1286,6 @@ class DovetailUtilsTesting(unittest.TestCase): log_calls = [ call(verbose, logger, "Executing command: '%s'" % cmd, 'debug'), call(verbose, logger, cmd_output, 'debug', True), - call(verbose, logger, '', 'debug', True), call(verbose, logger, "The command '%s' failed." % cmd, 'error')] mock_log.assert_has_calls(log_calls) mock_open.assert_called_once_with(cmd, shell=True, stdout=mock_pipe, diff --git a/dovetail/utils/dovetail_utils.py b/dovetail/utils/dovetail_utils.py index 9259b03f..306dacd1 100644 --- a/dovetail/utils/dovetail_utils.py +++ b/dovetail/utils/dovetail_utils.py @@ -60,8 +60,9 @@ def exec_cmd(cmd, logger=None, exit_on_error=False, info=False, count = 1 DEBUG = os.getenv('DEBUG') for line in iter(p.stdout.readline, b''): - exec_log(verbose, logger, line.strip(), level, True) - stdout += line + exec_log(verbose, logger, line.strip().decode('unicode-escape'), + level, True) + stdout += str(line) if progress_bar and (DEBUG is None or DEBUG.lower() != 'true'): show_progress_bar(count) count += 1 -- cgit 1.2.3-korg