summaryrefslogtreecommitdiff
path: root/rtemstoolkit
diff options
context:
space:
mode:
authorChris Johns <chrisj@rtems.org>2017-04-25 00:32:53 +1000
committerChris Johns <chrisj@rtems.org>2017-04-25 00:32:53 +1000
commit437092487f618d172b51b8d22a87cde36dad364d (patch)
tree435b00faa94de7eb5739ad0dfedca64a0a363718 /rtemstoolkit
parent7d3350d0bbcb7468fecfd9abffb3fe9f34c0c6c3 (diff)
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.
Diffstat (limited to 'rtemstoolkit')
-rwxr-xr-xrtemstoolkit/execute.py15
1 files 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