[rtems-tools commit] execute: Use the io python module for output capture.

Chris Johns chrisj at rtems.org
Mon Apr 24 06:42:39 UTC 2017


Module:    rtems-tools
Branch:    master
Commit:    437092487f618d172b51b8d22a87cde36dad364d
Changeset: http://git.rtems.org/rtems-tools/commit/?id=437092487f618d172b51b8d22a87cde36dad364d

Author:    Chris Johns <chrisj at rtems.org>
Date:      Tue Apr 25 00:32:53 2017 +1000

execute: Use the io python module for output capture.

This change drops the overhead of capturing the process output. The
io module in Python is similar to the POSIX API for a file read
where a read will return up to the buffer size rather than blocking
until the buffer is full.

---

 rtemstoolkit/execute.py | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)

diff --git a/rtemstoolkit/execute.py b/rtemstoolkit/execute.py
index 90ddce0..048f7a3 100755
--- a/rtemstoolkit/execute.py
+++ b/rtemstoolkit/execute.py
@@ -1,6 +1,6 @@
 #
 # RTEMS Tools Project (http://www.rtems.org/)
-# Copyright 2010-2016 Chris Johns (chrisj at rtems.org)
+# Copyright 2010-2017 Chris Johns (chrisj at rtems.org)
 # All rights reserved.
 #
 # This file is part of the RTEMS Tools package in 'rtems-tools'.
@@ -37,6 +37,7 @@
 from __future__ import print_function
 
 import functools
+import io
 import os
 import re
 import sys
@@ -193,7 +194,11 @@ class execute(object):
             line = ''
             try:
                 while True:
-                    data = fh.read(1)
+                    #
+                    # The io module file handling return up to the size passed
+                    # in.
+                    #
+                    data = fh.read(4096)
                     if len(data) == 0:
                         break
                     # str and bytes are the same type in Python2
@@ -255,7 +260,8 @@ class execute(object):
             stdout_thread = threading.Thread(target = _readthread,
                                              name = '_stdout[%s]' % (name),
                                              args = (self,
-                                                     proc.stdout,
+                                                     io.open(proc.stdout.fileno(),
+                                                             closefd = False),
                                                      self.output,
                                                      ''))
             stdout_thread.daemon = True
@@ -264,7 +270,8 @@ class execute(object):
             stderr_thread = threading.Thread(target = _readthread,
                                              name = '_stderr[%s]' % (name),
                                              args = (self,
-                                                     proc.stderr,
+                                                     io.open(proc.stderr.fileno(),
+                                                             closefd = False),
                                                      self.output,
                                                      self.error_prefix))
             stderr_thread.daemon = True



More information about the vc mailing list