Skip to content
Snippets Groups Projects
Commit 83f2f43e authored by Oz Linden's avatar Oz Linden
Browse files

convert run_build_tests to use argparse rather than optparse

parent a0c18425
No related branches found
No related tags found
No related merge requests found
...@@ -52,10 +52,11 @@ ...@@ -52,10 +52,11 @@
import signal import signal
import subprocess import subprocess
def main(command, libpath=[], vars={}): def main(command, arguments=[], libpath=[], vars={}):
"""Pass: """Pass:
command is a sequence (e.g. a list) of strings. The first item in the list command is the command to be executed
must be the command name, the rest are its arguments.
argument is a sequence (e.g. a list) of strings to be passed to command
libpath is a sequence of directory pathnames. These will be appended to libpath is a sequence of directory pathnames. These will be appended to
the platform-specific dynamic library search path environment variable. the platform-specific dynamic library search path environment variable.
...@@ -112,11 +113,13 @@ def main(command, libpath=[], vars={}): ...@@ -112,11 +113,13 @@ def main(command, libpath=[], vars={}):
print "%s=%s" % (key, value) print "%s=%s" % (key, value)
os.environ.update(dict([(str(key), str(value)) for key, value in vars.iteritems()])) os.environ.update(dict([(str(key), str(value)) for key, value in vars.iteritems()]))
# Run the child process. # Run the child process.
print "Running: %s" % " ".join(command) command_list = [command]
command_list.extend(arguments)
print "Running: %s" % " ".join(command_list)
# Make sure we see all relevant output *before* child-process output. # Make sure we see all relevant output *before* child-process output.
sys.stdout.flush() sys.stdout.flush()
try: try:
return subprocess.call(command) return subprocess.call(command_list)
except OSError as err: except OSError as err:
# If the caller is trying to execute a test program that doesn't # If the caller is trying to execute a test program that doesn't
# exist, we want to produce a reasonable error message rather than a # exist, we want to produce a reasonable error message rather than a
...@@ -304,21 +307,18 @@ def get_windows_table(): ...@@ -304,21 +307,18 @@ def get_windows_table():
return _windows_table return _windows_table
if __name__ == "__main__": if __name__ == "__main__":
from optparse import OptionParser import argparse
parser = OptionParser(usage="usage: %prog [options] command args...") parser = argparse.ArgumentParser()
# We want optparse support for the options we ourselves handle -- but we parser.add_argument("-D", "--define", dest="vars", default=[], action="append",
# DO NOT want it looking at options for the executable we intend to run, metavar="VAR=value",
# rejecting them as invalid because we don't define them. So configure the help="Add VAR=value to the env variables defined")
# parser to stop looking for options as soon as it sees the first parser.add_argument("-l", "--libpath", dest="libpath", default=[], action="append",
# positional argument (traditional Unix syntax). metavar="DIR",
parser.disable_interspersed_args() help="Add DIR to the platform-dependent DLL search path")
parser.add_option("-D", "--define", dest="vars", default=[], action="append", parser.add_argument("command")
metavar="VAR=value", parser.add_argument('args', nargs=argparse.REMAINDER)
help="Add VAR=value to the env variables defined") args = parser.parse_args()
parser.add_option("-l", "--libpath", dest="libpath", default=[], action="append",
metavar="DIR",
help="Add DIR to the platform-dependent DLL search path")
opts, args = parser.parse_args()
# What we have in opts.vars is a list of strings of the form "VAR=value" # What we have in opts.vars is a list of strings of the form "VAR=value"
# or possibly just "VAR". What we want is a dict. We can build that dict by # or possibly just "VAR". What we want is a dict. We can build that dict by
# constructing a list of ["VAR", "value"] pairs -- so split each # constructing a list of ["VAR", "value"] pairs -- so split each
...@@ -326,8 +326,8 @@ def get_windows_table(): ...@@ -326,8 +326,8 @@ def get_windows_table():
# "VAR=some=user=string"). To handle the case of just "VAR", append "" to # "VAR=some=user=string"). To handle the case of just "VAR", append "" to
# the list returned by split(), then slice off anything after the pair we # the list returned by split(), then slice off anything after the pair we
# want. # want.
rc = main(command=args, libpath=opts.libpath, rc = main(command=args.command, arguments=args.args, libpath=args.libpath,
vars=dict([(pair.split('=', 1) + [""])[:2] for pair in opts.vars])) vars=dict([(pair.split('=', 1) + [""])[:2] for pair in args.vars]))
if rc not in (None, 0): if rc not in (None, 0):
print >>sys.stderr, "Failure running: %s" % " ".join(args) print >>sys.stderr, "Failure running: %s" % " ".join(args)
print >>sys.stderr, "Error %s: %s" % (rc, translate_rc(rc)) print >>sys.stderr, "Error %s: %s" % (rc, translate_rc(rc))
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment