close_fds=False,
stdout=True,
stdin=None,
- stderr=subprocess.STDOUT):
+ stderr=subprocess.STDOUT,
+ user_cmd=False):
"""
exec's commands using subprocess Popen
Args:
return ''
cmd_output = None
+ if user_cmd:
+ stdout = True
+ elif stdout:
+ stdout = subprocess.PIPE
+ else:
+ stdout = cls.DEVNULL
try:
ch = subprocess.Popen(cmd,
env=env,
shell=shell,
close_fds=close_fds,
stdin=subprocess.PIPE if stdin else None,
- stdout=subprocess.PIPE if stdout else cls.DEVNULL,
+ stdout=stdout,
stderr=stderr)
utils.enable_subprocess_signal_forwarding(ch, signal.SIGINT)
if stdout or stdin:
cmd_output = ch.communicate(input=stdin)[0]
cmd_returncode = ch.wait()
except Exception as e:
- raise Exception('cmd \'%s\' failed (%s)' % (' '.join(cmd), str(e)))
+ if user_cmd:
+ raise Exception('cmd \'%s\' failed (%s)' % (cmd, str(e)))
+ else:
+ raise Exception('cmd \'%s\' failed (%s)' %
+ (' '.join(cmd), str(e)))
finally:
utils.disable_subprocess_signal_forwarding(signal.SIGINT)
if cmd_returncode != 0:
close_fds=close_fds,
stdout=stdout,
stdin=stdin,
- stderr=stderr)
+ stderr=stderr,
+ user_cmd=True)
@classmethod
def exec_command(cls, cmd, env=None, close_fds=False, stdout=True,