[libvirt] [libvirt-test-API][PATCH] Fix utils.exec_cmd output problem

Jincheng Miao jmiao at redhat.com
Tue Nov 26 09:17:57 UTC 2013


Thanks for review, 
yes, I missed this situation: stdout is not the subprocess.PIPE.

Since the stderr is always subprocess.PIPE, my another way is err after Popen.communicate().

The patch looks like:
---
 utils/utils.py | 2 ++---
 1 file changed, 2 insertions(+)

diff --git a/utils/utils.py b/utils/utils.py
index 147c1ef..d107cbd 100644
--- a/utils/utils.py
+++ b/utils/utils.py
@@ -412,6 +412,8 @@ def exec_cmd(command, sudo=False, cwd=None, infile=None, outfile=None, shell=Fal
     p = subprocess.Popen(command, shell=shell, close_fds=True, cwd=cwd,
                     stdin=infile, stdout=outfile, stderr=subprocess.PIPE)
     (out, err) = p.communicate(data)
     if out == None:
         # Prevent splitlines() from barfing later on
         out = ""
+    if err != "":
+        out += err
     return (p.returncode, out.splitlines())
 
 def remote_exec_pexpect(hostname, username, password, cmd):
-- 
1.8.3.1

----- Original Message -----
> Sorry I missed your patch.
> 
> The p.returncode can indicate the result of executing command unless you
> want the standard error.
> The subprocess.PIPE can ensure the variable out is always string type,
> but if the stdout is not the
> subprocess.PIPE, the variable out possibly be the type of None.
> so I think it is necessary to use the following code
> if out == None:
> out = ""
> 
> If you want to get standard error in the case of executing command
> failure. we need to consider other
> way.
> 
> Guannan
> 




More information about the libvir-list mailing list