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