123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- #!/usr/bin/env '%interpreter%'
- import os
- import tempfile
- import shutil
- import sys
- import subprocess
- import zipfile
- PYTHON_BINARY = '%interpreter%'
- MAIN_FILE = '%main%'
- PYTHON_PATH = 'PYTHONPATH'
- # Don't imply 'import site' on initialization
- PYTHON_ARG = '-S'
- def Main():
- args = sys.argv[1:]
- runfiles_path = tempfile.mkdtemp(prefix="Soong.python_")
- try:
- zf = zipfile.ZipFile(os.path.dirname(__file__))
- zf.extractall(runfiles_path)
- zf.close()
- new_python_path = runfiles_path
- old_python_path = os.environ.get(PYTHON_PATH)
- if old_python_path:
- os.environ.update({PYTHON_PATH: new_python_path + ":" + old_python_path})
- else:
- os.environ.update({PYTHON_PATH: new_python_path})
- # Now look for main python source file.
- main_filepath = os.path.join(runfiles_path, MAIN_FILE)
- assert os.path.exists(main_filepath), \
- 'Cannot exec() %r: file not found.' % main_filepath
- assert os.access(main_filepath, os.R_OK), \
- 'Cannot exec() %r: file not readable.' % main_filepath
- args = [PYTHON_BINARY, PYTHON_ARG, main_filepath] + args
- sys.stdout.flush()
- # close_fds=False so that you can run binaries with files provided on the command line:
- # my_python_app --file <(echo foo)
- sys.exit(subprocess.call(args, close_fds=False))
- finally:
- shutil.rmtree(runfiles_path, ignore_errors=True)
- if __name__ == '__main__':
- Main()
|