[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