blob: 508cc43a3be92615ea42234ab606a1c6a7078291 [file] [log] [blame]
# Copyright 2016 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import os
from os import path
import sys
# Based on http://stackoverflow.com/questions/377017/test-if-executable-exists-in-python.
def which(program):
def is_executable(fpath):
return path.isfile(fpath) and os.access(fpath, os.X_OK)
fpath, fname = path.split(program)
if fpath:
if is_executable(program):
return program
return None
env_paths = os.environ["PATH"].split(os.pathsep)
if sys.platform == "win32":
env_paths = get_windows_path(env_paths)
for part in env_paths:
part = part.strip('\"')
file = path.join(part, program)
if is_executable(file):
return file
if sys.platform == "win32" and not file.endswith(".exe"):
file_exe = file + ".exe"
if is_executable(file_exe):
return file_exe
return None
# Use to find 64-bit programs (e.g. Java) when using 32-bit python in Windows
def get_windows_path(env_paths):
new_env_paths = env_paths[:]
for env_path in env_paths:
env_path = env_path.lower()
if "system32" in env_path:
new_env_paths.append(env_path.replace("system32", "sysnative"))
return new_env_paths