Handle remctl results that are larger than a single pipe buffer
[invirt/packages/invirt-base.git] / python / invirt / remctl.py
index a97e422..956ca2d 100644 (file)
@@ -35,7 +35,11 @@ def remctl(host, *args, **kws):
                          + list(args),
                          stdout=subprocess.PIPE,
                          stderr=subprocess.PIPE)
-    v = p.wait()
-    if v:
-        raise CodeError('ERROR on remctl %s:\n%s' % (args, p.stderr.read()), v)
-    return p.stdout.read()
+    stdout, stderr = p.communicate()
+    if kws.get('err'):
+        return stdout, stderr
+    if p.returncode:
+        print >> sys.stderr, 'Error', p.returncode, 'on remctl', args, ':'
+        print >> sys.stderr, stderr
+        raise CodeError('ERROR on remctl')
+    return stdout