Merge pull request 'refs #2621: Redo interfaceAdmin to avoid truncating output' (#56) from fix-interfaceAdmin into main

Reviewed-on: #56
main
Vadim vtroshchinskiy 2025-08-14 10:05:51 +02:00
commit 4438167bfb
1 changed files with 39 additions and 16 deletions

View File

@ -299,27 +299,50 @@ class ogLiveWorker(ServerWorker):
sout = serr = ''
finished = False
while True:
try:
p.wait (0.05)
finished = True
except subprocess.TimeoutExpired:
pass
ready_to_read, _, _ = select.select ([p.stdout, p.stderr], [], [], 0.2)
out_finished = False
err_finished = False
buf_size = 4096
stdout_buf = bytes()
stderr_buf = bytes()
while True:
ready_to_read, _, exceptions = select.select ([p.stdout, p.stderr], [], [p.stdout, p.stderr], 0.2)
if p.stdout in ready_to_read:
l = p.stdout.readline()
partial = l.decode ('utf-8', 'ignore')
if self.stdout_q: self.stdout_q.put (partial)
sout += partial
data = p.stdout.read(buf_size)
stdout_buf = stdout_buf + data
if len(data) < buf_size:
out_finished = True
if p.stderr in ready_to_read:
l = p.stderr.readline()
partial = l.decode ('utf-8', 'ignore')
serr += partial
data = p.stdout.read(buf_size)
stderr_buf = stderr_buf + data
if len(data) < buf_size:
err_finished = True
if p.stdout in exceptions or p.stderr in exceptions:
# Error in either socket
finished = True
if out_finished and err_finished:
finished = True
if finished: break
sout = sout.strip()
serr = serr.strip()
sout = stdout_buf.decode('utf-8', 'ignore').strip()
serr = stdout_buf.decode('utf-8', 'ignore').strip()
try:
p.wait (0.1)
finished = True
except subprocess.TimeoutExpired:
pass
## DEBUG
logger.debug (f'stdout follows:')