Index: testing/scripts/common.py |
diff --git a/testing/scripts/common.py b/testing/scripts/common.py |
index d366fe15b24e9d95c922b17441704f76167963a4..ed9bcc855745f250b2800e94d0941350f5322276 100644 |
--- a/testing/scripts/common.py |
+++ b/testing/scripts/common.py |
@@ -4,11 +4,14 @@ |
import argparse |
import contextlib |
+import io |
import json |
import os |
+import logging |
import subprocess |
import sys |
import tempfile |
+import time |
SCRIPT_DIR = os.path.abspath(os.path.dirname(__file__)) |
@@ -70,21 +73,22 @@ def run_command(argv, env=None, cwd=None): |
return rc |
-def run_command_with_output(argv, env=None, cwd=None, stdoutfile=None): |
+def run_command_with_output(argv, stdoutfile, env=None, cwd=None, ): |
dnj
2017/05/19 21:27:16
Nit, trailing comma.
nednguyen
2017/05/19 21:31:15
Done.
|
+ """ Run command and stream its stdout/stderr to the console & |stdoutfile|. |
+ """ |
print 'Running %r in %r (env: %r)' % (argv, cwd, env) |
- rc = 1 |
- try: |
- output = subprocess.check_output(argv, env=env, cwd=cwd, |
- stderr=subprocess.STDOUT) |
- if stdoutfile: |
- with open(stdoutfile, 'w') as fp: |
- fp.write(output) |
- rc = 0 |
- except Exception: |
- # Exit code remains 1 and we don't write output |
- pass |
- print 'Command %r returned exit code %d' % (argv, rc) |
- return rc |
+ assert stdoutfile |
+ with io.open(stdoutfile, 'wb') as writer: |
dnj
2017/05/19 21:27:16
Nit, you can combine this into a single block:
wi
nednguyen
2017/05/19 21:31:14
Done.
|
+ with io.open(stdoutfile, 'rb', 1) as reader: |
dnj
2017/05/19 21:27:16
Note: the original used "w" (text-mode); "wb" and
nednguyen
2017/05/19 21:31:15
Oh, I just use "w" & "r" here to be sure.
|
+ process = subprocess.Popen(argv, env=env, cwd=cwd, stdout=writer, |
+ stderr=subprocess.STDOUT) |
+ while process.poll() is None: |
+ sys.stdout.write(reader.read()) |
+ time.sleep(1) |
dnj
2017/05/19 21:27:16
Note: if the subprocess is fast and repeated (e.g.
nednguyen
2017/05/19 21:31:15
Done.
|
+ # Read the remaining |
+ sys.stdout.write(reader.read()) |
+ print 'Command %r returned exit code %d' % (argv, process.returncode) |
+ return process.returncode |
def run_runtest(cmd_args, runtest_args): |