summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorSascha Silbe <silbe@linux.vnet.ibm.com>2016-09-06 22:05:44 +0200
committerFam Zheng <famz@redhat.com>2016-09-08 19:56:34 +0800
commitc977257045fdb90f98b92b9e08daa8ace378650b (patch)
treeebb40f6a6f3caf62d2cd27e511ac6f743c909652 /tests
parent9af4c174a38c345e36f8320f8bb7de64661bb18a (diff)
downloadqemu-c977257045fdb90f98b92b9e08daa8ace378650b.tar.gz
docker.py: don't hang on large docker output
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 <silbe@linux.vnet.ibm.com> Reviewed-by: Janosch Frank <frankja@linux.vnet.ibm.com> Message-Id: <1473192351-601-2-git-send-email-silbe@linux.vnet.ibm.com> Signed-off-by: Fam Zheng <famz@redhat.com>
Diffstat (limited to 'tests')
-rwxr-xr-xtests/docker/docker.py9
1 files changed, 6 insertions, 3 deletions
diff --git a/tests/docker/docker.py b/tests/docker/docker.py
index 222a1053fe..efb2bf4ac2 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)