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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 2013年11月26日 17:17, Jincheng Miao wrote:
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):

Why to append standard error to standard output. It is not right in semantics. In order to get the standard error if executing command failed, the following change is enough:

     if out == None:
         # Prevent splitlines() from barfing later on
         out = ""
+    if p.returncode:
+        out = err
     return (p.returncode, out.splitlines())


Guannan

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list





[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]