Index: build/android/pylib/cmd_helper.py |
diff --git a/build/android/pylib/cmd_helper.py b/build/android/pylib/cmd_helper.py |
index 8b501309060bc5943afbc9c7e96fb1ce97eac397..46b6981195ebcecf9b2ed43c1d13eace39d4b00a 100644 |
--- a/build/android/pylib/cmd_helper.py |
+++ b/build/android/pylib/cmd_helper.py |
@@ -40,11 +40,28 @@ def GetCmdOutput(args, cwd=None, shell=False): |
Captures and returns the command's stdout. |
Prints the command's stderr to logger (which defaults to stdout). |
""" |
+ (_, output) = GetCmdStatusAndOutput(args, cwd, shell) |
+ return output |
+ |
+def GetCmdStatusAndOutput(args, cwd=None, shell=False): |
+ """Executes a subprocess and returns its exit code and output. |
+ |
+ Args: |
+ args: A string or a sequence of program arguments. The program to execute is |
+ the string or the first item in the args sequence. |
+ cwd: If not None, the subprocess's current directory will be changed to |
+ |cwd| before it's executed. |
+ shell: Whether to execute args as a shell command. |
+ |
+ Returns: |
+ The tuple (exit code, output). |
+ """ |
logging.info(str(args) + ' ' + (cwd or '')) |
p = subprocess.Popen(args=args, cwd=cwd, stdout=subprocess.PIPE, |
stderr=subprocess.PIPE, shell=shell) |
stdout, stderr = p.communicate() |
+ exit_code = p.returncode |
if stderr: |
logging.critical(stderr) |
logging.info(stdout[:4096]) # Truncate output longer than 4k. |
- return stdout |
+ return (exit_code, stdout) |