From 437092487f618d172b51b8d22a87cde36dad364d Mon Sep 17 00:00:00 2001 From: Chris Johns Date: Tue, 25 Apr 2017 00:32:53 +1000 Subject: [PATCH] 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@rtems.org) +# Copyright 2010-2017 Chris Johns (chrisj@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