diff options
author | Per Øyvind Karlsen <proyvind@moondrake.org> | 2016-05-31 05:42:45 +0200 |
---|---|---|
committer | Per Øyvind Karlsen <proyvind@moondrake.org> | 2016-05-31 05:42:45 +0200 |
commit | c1b28c4339454e0b895f531432d1ff971222a163 (patch) | |
tree | 191617d5743a606f46b498ae71a5c1a3fcec3482 | |
parent | d09ff463d3461ca55e3c1f8b439d6699ae449763 (diff) | |
download | mgarepo-c1b28c4339454e0b895f531432d1ff971222a163.tar mgarepo-c1b28c4339454e0b895f531432d1ff971222a163.tar.gz mgarepo-c1b28c4339454e0b895f531432d1ff971222a163.tar.bz2 mgarepo-c1b28c4339454e0b895f531432d1ff971222a163.tar.xz mgarepo-c1b28c4339454e0b895f531432d1ff971222a163.zip |
make sure execcmd() handles large read buffers
-rw-r--r-- | MgaRepo/util.py | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/MgaRepo/util.py b/MgaRepo/util.py index ff71ce7..9008a59 100644 --- a/MgaRepo/util.py +++ b/MgaRepo/util.py @@ -71,11 +71,17 @@ def execcmd(*cmd, **kwargs): sys.stdout.write(data) output = error.getvalue() else: - proc.wait() - if proc.stdout is not None: - output = proc.stdout.read().decode('utf8') - if kwargs.get("strip", True): - output = output.rstrip() + # Make sure to avoid buffer getting full. + # Otherwise if ie. using proc.wait() both python + # and the process will just hang + while proc.poll() is None: + if proc.stdout is not None: + output += proc.stdout.read(8192).decode('utf8') + # Make sure that we've emptied the buffer entirely + output += proc.stdout.read().decode('utf8') + + if kwargs.get("strip", True): + output = output.rstrip() if (not kwargs.get("noerror")) and proc.returncode != 0: if kwargs.get("cleanerr"): |