# # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. # # # A platform-agnostic tool for running a program in a modified environment. # import sys import os import subprocess from optparse import OptionParser def main(argv=None): parser = OptionParser(usage="Usage: %prog [options] [--] VAR=VALUE... command [options] arg1 arg2...") parser.add_option("-i", "--ignore-environment", action="store_true", default=False, help="Start with an empty environment (do not inherit current environment)") (options, args) = parser.parse_args(args=argv) if options.ignore_environment: new_env = {} else: new_env = os.environ.copy() # pull out each name value pair while len(args): z = args[0].split("=", 1) if len(z) != 2: break # done with env args name, value = z[0], z[1] if len(name) == 0: raise Exception("Error: incorrect format for env var: '%s'" % str(args[0])) del args[0] if len(value) == 0: # value is not present, so delete it if name in new_env: del new_env[name] else: new_env[name] = value if len(args) == 0 or len(args[0]) == 0: raise Exception("Error: syntax error in command arguments") p = subprocess.Popen(args, env=new_env) return p.wait() if __name__ == "__main__": sys.exit(main())