@@ -55,50 +55,41 @@ def exec_command(self, cmd, wait_exit=False, verbose=False,
55
55
- proc: The process to use for subprocess creation.
56
56
:return: The output of the subprocess.
57
57
"""
58
- if os.name == 'nt':
59
- with tempfile.NamedTemporaryFile() as buf:
60
- process = subprocess.Popen(cmd, stdout=buf, stderr=subprocess.STDOUT)
61
- process.communicate()
62
- buf.seek(0)
63
- result = buf.read().decode(encoding)
64
- return result
58
+ process = subprocess.Popen(
59
+ cmd,
60
+ shell=shell,
61
+ stdin=stdin,
62
+ stdout=stdout,
63
+ stderr=stderr,
64
+ text=text
65
+ )
66
+
67
+ if get_process:
68
+ return process
69
+
70
+ try:
71
+ result, error = process.communicate(input=input, timeout=timeout)
72
+ except subprocess.TimeoutExpired:
73
+ process.kill()
74
+ raise ExecUtilException("Command timed out after {} seconds.".format(timeout))
75
+ exit_status = process.returncode
76
+
77
+ if encoding:
78
+ result = result.decode(encoding) if result else ''
79
+ error = error.decode(encoding) if error else ''
80
+
81
+ if exit_status != 0 or (expect_error and error):
82
+ if exit_status == 0:
83
+ exit_status = 1
84
+ raise ExecUtilException(message='Utility exited with non-zero code. Error `{}`'.format(error),
85
+ command=cmd,
86
+ exit_code=exit_status,
87
+ out=result)
88
+
89
+ if verbose:
90
+ return exit_status, result, error
65
91
else:
66
- process = subprocess.Popen(
67
- cmd,
68
- shell=shell,
69
- stdout=stdout,
70
- stderr=stderr,
71
- )
72
- if get_process:
73
- return process
74
-
75
- try:
76
- result, error = process.communicate(input, timeout=timeout)
77
- except subprocess.TimeoutExpired:
78
- process.kill()
79
- raise ExecUtilException("Command timed out after {} seconds.".format(timeout))
80
- exit_status = process.returncode
81
-
82
- error_found = exit_status != 0 or any(marker in error for marker in error_markers)
83
-
84
- if encoding:
85
- result = result.decode(encoding)
86
- error = error.decode(encoding)
87
-
88
- if expect_error:
89
- raise Exception(result, error)
90
-
91
- if exit_status != 0 or error_found:
92
- if exit_status == 0:
93
- exit_status = 1
94
- raise ExecUtilException(message='Utility exited with non-zero code. Error `{}`'.format(error),
95
- command=cmd,
96
- exit_code=exit_status,
97
- out=result)
98
- if verbose:
99
- return exit_status, result, error
100
- else:
101
- return result
92
+ return result
102
93
103
94
# Environment setup
104
95
def environ(self, var_name):
0 commit comments