in src/common/utils.py [0:0]
def _run_command(command_function, command, env=None, raise_on_error=True, execute_as_user=None, log_error=True):
try:
if env is None:
env = {}
env.update(os.environ.copy())
if execute_as_user:
log.debug("Executing command as user '%s': %s", execute_as_user, command)
pw_record = pwd.getpwnam(execute_as_user)
user_uid = pw_record.pw_uid
user_gid = pw_record.pw_gid
preexec_fn = _demote(user_uid, user_gid)
return command_function(command, env, preexec_fn)
else:
log.debug("Executing command: %s", command)
return command_function(command, env, None)
except subprocess.CalledProcessError as e:
# CalledProcessError.__str__ already produces a significant error message
if raise_on_error:
if log_error:
log.error(e)
raise
else:
if log_error:
log.warning(e)
return e
except OSError as e:
log.error("Unable to execute the command %s. Failed with exception: %s", command, e)
raise