| Index: tools/testrunner/local/commands.py
|
| diff --git a/tools/testrunner/local/commands.py b/tools/testrunner/local/commands.py
|
| index 01f170dc872d1bec543cf910a4d032553ef89df5..4f3dc51e02b20d763e80adb3d65c9e8433ebd21d 100644
|
| --- a/tools/testrunner/local/commands.py
|
| +++ b/tools/testrunner/local/commands.py
|
| @@ -64,34 +64,34 @@ def Win32SetErrorMode(mode):
|
|
|
|
|
| def RunProcess(verbose, timeout, args, **rest):
|
| - if verbose: print "#", " ".join(args)
|
| - popen_args = args
|
| - prev_error_mode = SEM_INVALID_VALUE
|
| - if utils.IsWindows():
|
| - popen_args = subprocess.list2cmdline(args)
|
| - # Try to change the error mode to avoid dialogs on fatal errors. Don't
|
| - # touch any existing error mode flags by merging the existing error mode.
|
| - # See http://blogs.msdn.com/oldnewthing/archive/2004/07/27/198410.aspx.
|
| - error_mode = SEM_NOGPFAULTERRORBOX
|
| - prev_error_mode = Win32SetErrorMode(error_mode)
|
| - Win32SetErrorMode(error_mode | prev_error_mode)
|
| - process = subprocess.Popen(
|
| - shell=utils.IsWindows(),
|
| - args=popen_args,
|
| - **rest
|
| - )
|
| - if (utils.IsWindows() and prev_error_mode != SEM_INVALID_VALUE):
|
| - Win32SetErrorMode(prev_error_mode)
|
| - # Compute the end time - if the process crosses this limit we
|
| - # consider it timed out.
|
| - if timeout is None: end_time = None
|
| - else: end_time = time.time() + timeout
|
| - timed_out = False
|
| - # Repeatedly check the exit code from the process in a
|
| - # loop and keep track of whether or not it times out.
|
| - exit_code = None
|
| - sleep_time = INITIAL_SLEEP_TIME
|
| try:
|
| + if verbose: print "#", " ".join(args)
|
| + popen_args = args
|
| + prev_error_mode = SEM_INVALID_VALUE
|
| + if utils.IsWindows():
|
| + popen_args = subprocess.list2cmdline(args)
|
| + # Try to change the error mode to avoid dialogs on fatal errors. Don't
|
| + # touch any existing error mode flags by merging the existing error mode.
|
| + # See http://blogs.msdn.com/oldnewthing/archive/2004/07/27/198410.aspx.
|
| + error_mode = SEM_NOGPFAULTERRORBOX
|
| + prev_error_mode = Win32SetErrorMode(error_mode)
|
| + Win32SetErrorMode(error_mode | prev_error_mode)
|
| + process = subprocess.Popen(
|
| + shell=utils.IsWindows(),
|
| + args=popen_args,
|
| + **rest
|
| + )
|
| + if (utils.IsWindows() and prev_error_mode != SEM_INVALID_VALUE):
|
| + Win32SetErrorMode(prev_error_mode)
|
| + # Compute the end time - if the process crosses this limit we
|
| + # consider it timed out.
|
| + if timeout is None: end_time = None
|
| + else: end_time = time.time() + timeout
|
| + timed_out = False
|
| + # Repeatedly check the exit code from the process in a
|
| + # loop and keep track of whether or not it times out.
|
| + exit_code = None
|
| + sleep_time = INITIAL_SLEEP_TIME
|
| while exit_code is None:
|
| if (not end_time is None) and (time.time() >= end_time):
|
| # Kill the process and wait for it to exit.
|
| @@ -131,10 +131,10 @@ def CheckedUnlink(name):
|
|
|
|
|
| def Execute(args, verbose=False, timeout=None):
|
| - args = [ c for c in args if c != "" ]
|
| - (fd_out, outname) = tempfile.mkstemp()
|
| - (fd_err, errname) = tempfile.mkstemp()
|
| try:
|
| + args = [ c for c in args if c != "" ]
|
| + (fd_out, outname) = tempfile.mkstemp()
|
| + (fd_err, errname) = tempfile.mkstemp()
|
| (exit_code, timed_out) = RunProcess(
|
| verbose,
|
| timeout,
|
| @@ -142,12 +142,15 @@ def Execute(args, verbose=False, timeout=None):
|
| stdout=fd_out,
|
| stderr=fd_err
|
| )
|
| + except KeyboardInterrupt:
|
| + raise
|
| except:
|
| raise
|
| - os.close(fd_out)
|
| - os.close(fd_err)
|
| - out = file(outname).read()
|
| - errors = file(errname).read()
|
| - CheckedUnlink(outname)
|
| - CheckedUnlink(errname)
|
| + finally:
|
| + os.close(fd_out)
|
| + os.close(fd_err)
|
| + out = file(outname).read()
|
| + errors = file(errname).read()
|
| + CheckedUnlink(outname)
|
| + CheckedUnlink(errname)
|
| return output.Output(exit_code, timed_out, out, errors)
|
|
|