@@ -64,47 +64,55 @@ def _process_output(encoding, temp_file_path):
64
64
output = output .decode (encoding )
65
65
return output ,None # In Windows stderr writing in stdout
66
66
67
- def _run_command (self ,cmd ,shell ,input ,stdin ,stdout ,stderr ,get_process ,timeout ,encoding ):
68
- """Execute a command and return the process and its output."""
69
- if os .name == 'nt' and stdout is None :# Windows
70
- with tempfile .NamedTemporaryFile (mode = 'w+b' ,delete = False )as temp_file :
71
- stdout = temp_file
72
- stderr = subprocess .STDOUT
73
- process = subprocess .Popen (
74
- cmd ,
75
- shell = shell ,
76
- stdin = stdin or subprocess .PIPE if input is not None else None ,
77
- stdout = stdout ,
78
- stderr = stderr ,
79
- )
80
- if get_process :
81
- return process ,None ,None
82
- temp_file_path = temp_file .name
83
-
84
- # Wait process finished
85
- process .wait ()
86
-
87
- output ,error = self ._process_output (encoding ,temp_file_path )
88
- return process ,output ,error
89
- else :# Other OS
67
+ def _run_command__nt (self ,cmd ,shell ,input ,stdin ,stdout ,stderr ,get_process ,timeout ,encoding ):
68
+ with tempfile .NamedTemporaryFile (mode = 'w+b' ,delete = False )as temp_file :
69
+ stdout = temp_file
70
+ stderr = subprocess .STDOUT
90
71
process = subprocess .Popen (
91
72
cmd ,
92
73
shell = shell ,
93
74
stdin = stdin or subprocess .PIPE if input is not None else None ,
94
- stdout = stdout or subprocess . PIPE ,
95
- stderr = stderr or subprocess . PIPE ,
75
+ stdout = stdout ,
76
+ stderr = stderr ,
96
77
)
97
78
if get_process :
98
79
return process ,None ,None
99
- try :
100
- output ,error = process .communicate (input = input .encode (encoding )if input else None ,timeout = timeout )
101
- if encoding :
102
- output = output .decode (encoding )
103
- error = error .decode (encoding )
104
- return process ,output ,error
105
- except subprocess .TimeoutExpired :
106
- process .kill ()
107
- raise ExecUtilException ("Command timed out after {} seconds." .format (timeout ))
80
+ temp_file_path = temp_file .name
81
+
82
+ # Wait process finished
83
+ process .wait ()
84
+
85
+ output ,error = self ._process_output (encoding ,temp_file_path )
86
+ return process ,output ,error
87
+
88
+ def _run_command__generic (self ,cmd ,shell ,input ,stdin ,stdout ,stderr ,get_process ,timeout ,encoding ):
89
+ process = subprocess .Popen (
90
+ cmd ,
91
+ shell = shell ,
92
+ stdin = stdin or subprocess .PIPE if input is not None else None ,
93
+ stdout = stdout or subprocess .PIPE ,
94
+ stderr = stderr or subprocess .PIPE ,
95
+ )
96
+ if get_process :
97
+ return process ,None ,None
98
+ try :
99
+ output ,error = process .communicate (input = input .encode (encoding )if input else None ,timeout = timeout )
100
+ if encoding :
101
+ output = output .decode (encoding )
102
+ error = error .decode (encoding )
103
+ return process ,output ,error
104
+ except subprocess .TimeoutExpired :
105
+ process .kill ()
106
+ raise ExecUtilException ("Command timed out after {} seconds." .format (timeout ))
107
+
108
+ def _run_command (self ,cmd ,shell ,input ,stdin ,stdout ,stderr ,get_process ,timeout ,encoding ):
109
+ """Execute a command and return the process and its output."""
110
+ if os .name == 'nt' and stdout is None :# Windows
111
+ method = __class__ ._run_command__nt
112
+ else :# Other OS
113
+ method = __class__ ._run_command__generic
114
+
115
+ return method (self ,cmd ,shell ,input ,stdin ,stdout ,stderr ,get_process ,timeout ,encoding )
108
116
109
117
def exec_command (self ,cmd ,wait_exit = False ,verbose = False ,expect_error = False ,encoding = None ,shell = False ,
110
118
text = False ,input = None ,stdin = None ,stdout = None ,stderr = None ,get_process = False ,timeout = None ,