[libvirt] [libvirt-test-API][PATCH] Fix utils.exec_cmd output problem
Jincheng Miao
jmiao at redhat.com
Thu Nov 21 07:31:00 UTC 2013
As described before, this patch should be :
---
utils/utils.py | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/utils/utils.py b/utils/utils.py
index 147c1ef..ec09c33 100644
--- a/utils/utils.py
+++ b/utils/utils.py
@@ -409,9 +409,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 out == "":
+ out = err
return (p.returncode, out.splitlines())
def remote_exec_pexpect(hostname, username, password, cmd):
--
1.8.3.1
----- Original Message -----
> ----- Original Message -----
> > The 'out' returned from exec_cmds is not 'None' type if stderr occurs, it
> > is
> > because utils pass 'subprocess.PIPE' to stdout to open this subprocess.
> >
> > "Similarly, to get anything other than None in the result tuple, you need
> > to
> > give stdout=PIPE and/or stderr=PIPE too."
> > (see http://docs.python.org/2/library/subprocess.html#module-subprocess)
> >
> > Finally, make out equals to err when stderr happened.
> > ---
> > utils/utils.py | 6 ++----
> > 1 file changed, 2 insertions(+), 4 deletions(-)
> >
> > diff --git a/utils/utils.py b/utils/utils.py
> > index 147c1ef..2248ce1 100644
> > --- a/utils/utils.py
> > +++ b/utils/utils.py
> > @@ -404,14 +404,12 @@ def exec_cmd(command, sudo=False, cwd=None,
> > infile=None, outfile=None, shell=Fal
> > command = ["sudo"] + command
> > if infile == None:
> > infile = subprocess.PIPE
> > - if outfile == None:
> > - outfile = subprocess.PIPE
>
> hmm, there is a little problem: if outfile is not subprocess.PIPE, exec_cmd
> would not capture the output of command. So I think the best choice is check
> whether 'out' is a null string, rather than a None type.
>
> > 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 = ""
> > + # Because stderr is PIPE, err will not be None, and can be splitlines.
> > + out = err
> > return (p.returncode, out.splitlines())
> >
> > def remote_exec_pexpect(hostname, username, password, cmd):
> > --
> > 1.8.3.1
> >
> >
>
> --
> libvir-list mailing list
> libvir-list at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list
>
More information about the libvir-list
mailing list