@@ -88,26 +88,34 @@ def handle_process_output(process, stdout_handler, stderr_handler, finalizer, de
8888 Set it to False if `universal_newline == True` (then streams are in text-mode)
8989 or if decoding must happen later (i.e. for Diffs).
9090 """
91+ if decode_streams :
92+ ZERO = b''
93+ LF = b'\n '
94+ CR = b'\r '
95+ else :
96+ ZERO = u''
97+ LF = u'\n '
98+ CR = u'\r '
9199
92100def _parse_lines_from_buffer (buf ):
93- line = b''
101+ line = ZERO
94102bi = 0
95103lb = len (buf )
96104while bi < lb :
97- char = _bchr ( buf [bi ])
105+ char = buf [bi ]
98106bi += 1
99107
100- if char in (b' \r ' , b' \n ' )and line :
101- yield bi ,line + b' \n '
102- line = b''
108+ if char in (LF , CR )and line :
109+ yield bi ,line + LF
110+ line = ZERO
103111else :
104112line += char
105113# END process parsed line
106114# END while file is not done reading
107115# end
108116
109117def _read_lines_from_fno (fno ,last_buf_list ):
110- buf = os .read (fno , mmap .PAGESIZE )
118+ buf = fno .read (mmap .PAGESIZE )
111119buf = last_buf_list [0 ]+ buf
112120
113121bi = 0
@@ -192,8 +200,8 @@ def pump_stream(cmdline, name, stream, is_decode, handler):
192200else :
193201# poll is preferred, as select is limited to file handles up to 1024 ... . This could otherwise be
194202# an issue for us, as it matters how many handles our own process has
195- fdmap = {outfn : (stdout_handler , [b'' ],decode_streams ),
196- errfn : (stderr_handler , [b'' ],decode_streams )}
203+ fdmap = {outfn : (process . stdout , stdout_handler , [ZERO ],decode_streams ),
204+ errfn : (process . stderr , stderr_handler , [ZERO ],decode_streams )}
197205
198206READ_ONLY = select .POLLIN | select .POLLPRI | select .POLLHUP | select .POLLERR # @UndefinedVariable
199207CLOSED = select .POLLHUP | select .POLLERR # @UndefinedVariable
@@ -217,7 +225,7 @@ def pump_stream(cmdline, name, stream, is_decode, handler):
217225if result & CLOSED :
218226closed_streams .add (fd )
219227else :
220- _dispatch_lines (fd , * fdmap [fd ])
228+ _dispatch_lines (* fdmap [fd ])
221229# end handle closed stream
222230# end for each poll-result tuple
223231
@@ -227,8 +235,8 @@ def pump_stream(cmdline, name, stream, is_decode, handler):
227235# end endless loop
228236
229237# Depelete all remaining buffers
230- for fno ,( handler , buf_list , decode ) in fdmap .items ():
231- _deplete_buffer (fno , handler , buf_list , decode )
238+ for fno ,args in fdmap .items ():
239+ _deplete_buffer (* args )
232240# end for each file handle
233241
234242for fno in fdmap .keys ():