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