1cb93a386Sopenharmony_ci#!/usr/bin/python 2cb93a386Sopenharmony_ci# Copyright (c) 2014 The Chromium Authors. All rights reserved. 3cb93a386Sopenharmony_ci# Use of this source code is governed by a BSD-style license that can be 4cb93a386Sopenharmony_ci# found in the LICENSE file. 5cb93a386Sopenharmony_ci 6cb93a386Sopenharmony_ci"""Module that finds and runs a binary by looking in the likely locations.""" 7cb93a386Sopenharmony_ci 8cb93a386Sopenharmony_ci 9cb93a386Sopenharmony_ciimport os 10cb93a386Sopenharmony_ciimport subprocess 11cb93a386Sopenharmony_ciimport sys 12cb93a386Sopenharmony_ci 13cb93a386Sopenharmony_ci 14cb93a386Sopenharmony_cidef run_command(args): 15cb93a386Sopenharmony_ci """Runs a program from the command line and returns stdout. 16cb93a386Sopenharmony_ci 17cb93a386Sopenharmony_ci Args: 18cb93a386Sopenharmony_ci args: Command line to run, as a list of string parameters. args[0] is the 19cb93a386Sopenharmony_ci binary to run. 20cb93a386Sopenharmony_ci 21cb93a386Sopenharmony_ci Returns: 22cb93a386Sopenharmony_ci stdout from the program, as a single string. 23cb93a386Sopenharmony_ci 24cb93a386Sopenharmony_ci Raises: 25cb93a386Sopenharmony_ci Exception: the program exited with a nonzero return code. 26cb93a386Sopenharmony_ci """ 27cb93a386Sopenharmony_ci proc = subprocess.Popen(args, 28cb93a386Sopenharmony_ci stdout=subprocess.PIPE, 29cb93a386Sopenharmony_ci stderr=subprocess.PIPE) 30cb93a386Sopenharmony_ci (stdout, stderr) = proc.communicate() 31cb93a386Sopenharmony_ci if proc.returncode is not 0: 32cb93a386Sopenharmony_ci raise Exception('command "%s" failed: %s' % (args, stderr)) 33cb93a386Sopenharmony_ci return stdout 34cb93a386Sopenharmony_ci 35cb93a386Sopenharmony_ci 36cb93a386Sopenharmony_cidef find_path_to_program(program): 37cb93a386Sopenharmony_ci """Returns path to an existing program binary. 38cb93a386Sopenharmony_ci 39cb93a386Sopenharmony_ci Args: 40cb93a386Sopenharmony_ci program: Basename of the program to find (e.g., 'render_pictures'). 41cb93a386Sopenharmony_ci 42cb93a386Sopenharmony_ci Returns: 43cb93a386Sopenharmony_ci Absolute path to the program binary, as a string. 44cb93a386Sopenharmony_ci 45cb93a386Sopenharmony_ci Raises: 46cb93a386Sopenharmony_ci Exception: unable to find the program binary. 47cb93a386Sopenharmony_ci """ 48cb93a386Sopenharmony_ci trunk_path = os.path.abspath(os.path.join(os.path.dirname(__file__), 49cb93a386Sopenharmony_ci os.pardir)) 50cb93a386Sopenharmony_ci possible_paths = [os.path.join(trunk_path, 'out', 'Release', program), 51cb93a386Sopenharmony_ci os.path.join(trunk_path, 'out', 'Debug', program), 52cb93a386Sopenharmony_ci os.path.join(trunk_path, 'out', 'Release', 53cb93a386Sopenharmony_ci program + '.exe'), 54cb93a386Sopenharmony_ci os.path.join(trunk_path, 'out', 'Debug', 55cb93a386Sopenharmony_ci program + '.exe')] 56cb93a386Sopenharmony_ci for try_path in possible_paths: 57cb93a386Sopenharmony_ci if os.path.isfile(try_path): 58cb93a386Sopenharmony_ci return try_path 59cb93a386Sopenharmony_ci raise Exception('cannot find %s in paths %s; maybe you need to ' 60cb93a386Sopenharmony_ci 'build %s?' % (program, possible_paths, program)) 61cb93a386Sopenharmony_ci 62