Home | History | Annotate | Download | only in tests
      1 #
      2 # Copyright (C) 2015 The Android Open Source Project
      3 #
      4 # Licensed under the Apache License, Version 2.0 (the "License");
      5 # you may not use this file except in compliance with the License.
      6 # You may obtain a copy of the License at
      7 #
      8 #      http://www.apache.org/licenses/LICENSE-2.0
      9 #
     10 # Unless required by applicable law or agreed to in writing, software
     11 # distributed under the License is distributed on an "AS IS" BASIS,
     12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13 # See the License for the specific language governing permissions and
     14 # limitations under the License.
     15 #
     16 import contextlib
     17 import os
     18 import subprocess
     19 
     20 
     21 def color_string(string, color):
     22     colors = {
     23         'green': '\033[92m',
     24         'red': '\033[91m',
     25         'yellow': '\033[93m',
     26     }
     27     end_color = '\033[0m'
     28     return colors[color] + string + end_color
     29 
     30 
     31 @contextlib.contextmanager
     32 def cd(path):
     33     curdir = os.getcwd()
     34     os.chdir(path)
     35     try:
     36         yield
     37     finally:
     38         os.chdir(curdir)
     39 
     40 
     41 def call_output(cmd, *args, **kwargs):
     42     """Invoke the specified command and return exit code and output.
     43 
     44     This is the missing subprocess.call_output, which is the combination of
     45     subprocess.call and subprocess.check_output. Like call, it returns an exit
     46     code rather than raising an exception. Like check_output, it returns the
     47     output of the program. Unlike check_output, it returns the output even on
     48     failure.
     49 
     50     Returns: Tuple of (exit_code, output).
     51     """
     52     proc = subprocess.Popen(cmd, stdout=subprocess.PIPE,
     53                             stderr=subprocess.STDOUT, *args, **kwargs)
     54     out, _ = proc.communicate()
     55     return proc.returncode, out
     56