Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(38)

Unified Diff: gclient_utils.py

Issue 3174020: Add stdout param to SubprocessCallAndFilter(). (Closed)
Patch Set: fix unit test Created 10 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « gclient_scm.py ('k') | scm.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gclient_utils.py
diff --git a/gclient_utils.py b/gclient_utils.py
index 0ab322a2d1eab1492a0109e367ad2c0d19533677..8c75ecefac399a9be895ff63d6c40cff6caee76b 100644
--- a/gclient_utils.py
+++ b/gclient_utils.py
@@ -266,7 +266,9 @@ def SubprocessCallAndFilter(command,
in_directory,
print_messages,
print_stdout,
- fail_status=None, filter_fn=None):
+ fail_status=None,
+ filter_fn=None,
+ stdout=None):
"""Runs command, a list, in directory in_directory.
If print_messages is true, a message indicating what is being done
@@ -287,9 +289,10 @@ def SubprocessCallAndFilter(command,
exit with an exit status of fail_status. If fail_status is None (the
default), gclient will raise an Error exception.
"""
+ stdout = stdout or sys.stdout
logging.debug(command)
if print_messages:
- print('\n________ running \'%s\' in \'%s\''
+ stdout.write('\n________ running \'%s\' in \'%s\'\n'
% (' '.join(command), in_directory))
kid = Popen(command, bufsize=0, cwd=in_directory,
@@ -298,7 +301,7 @@ def SubprocessCallAndFilter(command,
# Do a flush of sys.stdout before we begin reading from the subprocess's
# stdout.
last_flushed_at = time.time()
- sys.stdout.flush()
+ stdout.flush()
# Also, we need to forward stdout to prevent weird re-ordering of output.
# This has to be done on a per byte basis to make sure it is not buffered:
@@ -310,10 +313,10 @@ def SubprocessCallAndFilter(command,
if in_byte != '\r':
if print_stdout:
if not print_messages:
- print('\n________ running \'%s\' in \'%s\''
+ stdout.write('\n________ running \'%s\' in \'%s\'\n'
% (' '.join(command), in_directory))
print_messages = True
- sys.stdout.write(in_byte)
+ stdout.write(in_byte)
if in_byte != '\n':
in_line += in_byte
if in_byte == '\n':
@@ -325,7 +328,7 @@ def SubprocessCallAndFilter(command,
# which can slow busy readers down.
if (time.time() - last_flushed_at) > 10:
last_flushed_at = time.time()
- sys.stdout.flush()
+ stdout.flush()
in_byte = kid.stdout.read(1)
# Flush the rest of buffered output. This is only an issue with files not
# ending with a \n.
@@ -335,11 +338,9 @@ def SubprocessCallAndFilter(command,
if rv:
msg = 'failed to run command: %s' % ' '.join(command)
-
if fail_status != None:
- print >> sys.stderr, msg
+ sys.stderr.write(msg + '\n')
sys.exit(fail_status)
-
raise Error(msg)
« no previous file with comments | « gclient_scm.py ('k') | scm.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698