run.py: buffer fractional lines until a newline is received.
This makes output a lot prettier, but a bit less immediate. It doesn't
affect --raw mode though, so it should be okay.
Change-Id: Ib6371ee7fd39cfb8fe36783037da3d842d923b33
diff --git a/run.py b/run.py
index b540421..1130dc7 100755
--- a/run.py
+++ b/run.py
@@ -42,23 +42,32 @@
class Handler(object):
+ """When data is received from the given file, print it line by line."""
+
def __init__(self, prefix, fileobj):
self.prefix = prefix
self.fileobj = fileobj
+ self.buf = ''
+
+ def __del__(self):
+ if self.buf and not self.buf.endswith('\n'):
+ self.buf += '\n'
+ self.PrintBuf()
def fileno(self): #gpylint: disable-msg=C6409
return self.fileobj.fileno()
+ def PrintBuf(self):
+ while '\n' in self.buf:
+ line, self.buf = self.buf.split('\n', 1)
+ print '%s: %s' % (self.prefix, line)
+
def Run(self):
"""Read from this handler and write its results to stdout."""
- buf = os.read(self.fileobj.fileno(), 65536)
- if buf:
- if not buf.endswith('\n'):
- buf += '\n'
- lines = buf.split('\n')[:-1]
- for line in lines:
- print '%s: %s' % (self.prefix, line)
- return buf
+ got = os.read(self.fileobj.fileno(), 65536)
+ self.buf += got
+ self.PrintBuf()
+ return got
def main():