[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 2/9] docker.py: don't hang on large docker output
From: |
Fam Zheng |
Subject: |
[Qemu-devel] [PULL 2/9] docker.py: don't hang on large docker output |
Date: |
Fri, 9 Sep 2016 13:52:16 +0800 |
From: Sascha Silbe <address@hidden>
Unlike Popen.communicate(), subprocess.call() doesn't read from the
stdout file descriptor. If the child process produces more output than
fits into the pipe buffer, it will block indefinitely.
If we don't intend to consume the output, just send it straight to
/dev/null to avoid this issue.
Signed-off-by: Sascha Silbe <address@hidden>
Reviewed-by: Janosch Frank <address@hidden>
Message-Id: <address@hidden>
Signed-off-by: Fam Zheng <address@hidden>
---
tests/docker/docker.py | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/tests/docker/docker.py b/tests/docker/docker.py
index 222a105..efb2bf4 100755
--- a/tests/docker/docker.py
+++ b/tests/docker/docker.py
@@ -25,6 +25,10 @@ from tarfile import TarFile, TarInfo
from StringIO import StringIO
from shutil import copy, rmtree
+
+DEVNULL = open(os.devnull, 'wb')
+
+
def _text_checksum(text):
"""Calculate a digest string unique to the text content"""
return hashlib.sha1(text).hexdigest()
@@ -34,8 +38,7 @@ def _guess_docker_command():
commands = [["docker"], ["sudo", "-n", "docker"]]
for cmd in commands:
if subprocess.call(cmd + ["images"],
- stdout=subprocess.PIPE,
- stderr=subprocess.PIPE) == 0:
+ stdout=DEVNULL, stderr=DEVNULL) == 0:
return cmd
commands_txt = "\n".join([" " + " ".join(x) for x in commands])
raise Exception("Cannot find working docker command. Tried:\n%s" % \
@@ -98,7 +101,7 @@ class Docker(object):
def _do(self, cmd, quiet=True, infile=None, **kwargs):
if quiet:
- kwargs["stdout"] = subprocess.PIPE
+ kwargs["stdout"] = DEVNULL
if infile:
kwargs["stdin"] = infile
return subprocess.call(self._command + cmd, **kwargs)
--
2.7.4
- [Qemu-devel] [PULL 0/9] Docker patches, Fam Zheng, 2016/09/09
- [Qemu-devel] [PULL 1/9] docker: Add a glib2-2.22 image, Fam Zheng, 2016/09/09
- [Qemu-devel] [PULL 2/9] docker.py: don't hang on large docker output,
Fam Zheng <=
- [Qemu-devel] [PULL 3/9] docker: avoid dependency on 'realpath' package, Fam Zheng, 2016/09/09
- [Qemu-devel] [PULL 4/9] docker: debian-bootstrap.pre: print error messages to stderr, Fam Zheng, 2016/09/09
- [Qemu-devel] [PULL 5/9] docker: debian-bootstrap.pre: print helpful message if DEB_ARCH/DEB_TYPE unset, Fam Zheng, 2016/09/09
- [Qemu-devel] [PULL 6/9] docker: print warning if EXECUTABLE is not set when building debootstrap image, Fam Zheng, 2016/09/09
- [Qemu-devel] [PULL 7/9] docker: make sure debootstrap is at least 1.0.67, Fam Zheng, 2016/09/09
- [Qemu-devel] [PULL 9/9] docker: silence debootstrap when --quiet is given, Fam Zheng, 2016/09/09
- [Qemu-devel] [PULL 8/9] docker: build debootstrap after cloning, Fam Zheng, 2016/09/09
- Re: [Qemu-devel] [PULL 0/9] Docker patches, Peter Maydell, 2016/09/09