self.error(msg, out, err)
if raise_on_error:
raise RuntimeError, msg
-
# Wait for pid file to be generated
pid, ppid = self.wait_pid(
home = home,
(out, err), proc = self.check_errors(home, ecodefile, stderr)
# Out is what was written in the stderr file
- if out or err:
+ if err:
msg = " Failed to run command '%s' " % command
self.error(msg, out, err)
}
# Export environment
- environ = "\n".join(map(lambda e: "export %s" % e, env.split(" "))) + "\n" \
- if env else ""
+ environ = self.format_environment(env)
# Add environ to command
command = environ + command
dst = os.path.join(home, shfile)
return self.upload(command, dst, text = True)
+ def format_environment(self, env, inline = False):
+ """Format environmental variables for command to be executed either
+ as an inline command (i.e. PYTHONPATH=src/.. python script.py) or
+ as a bash script (i.e. export PYTHONPATH=src/.. \n export LALA=.. \n)
+ """
+ sep = " " if inline else "\n"
+ export = " " if inline else "export"
+ return sep.join(map(lambda e: "%s %s" % (export, e), env.split(" "))) \
+ + sep if env else ""
+
def check_errors(self, home,
ecodefile = "exitcode",
- stderr = "stderr"):
+ stderr = "stderr",
+ stdout = "stdout"):
"""
Checks whether errors occurred while running a command.
It first checks the exit code for the command, and only if the
exit code is an error one it returns the error output.
+
"""
out = err = ""
proc = None
- # get Exit code
+ # get exit code saved in the 'exitcode' file
ecode = self.exitcode(home, ecodefile)
if ecode in [ ExitCode.CORRUPTFILE, ExitCode.ERROR ]:
elif ecode > 0 or ecode == ExitCode.FILENOTFOUND:
# The process returned an error code or didn't exist.
# Check standard error.
- (out, err), proc = self.check_output(home, stderr)
-
- # If the stderr file was not found, assume nothing happened.
- # We just ignore the error.
+ (err, eerr), proc = self.check_output(home, stderr)
+
+ # Alsow retrive standard output for information
+ (out, oerr), oproc = self.check_output(home, stdout)
+
+ # If the stderr file was not found, assume nothing bad happened,
+ # and just ignore the error.
# (cat returns 1 for error "No such file or directory")
if ecode == ExitCode.FILENOTFOUND and proc.poll() == 1:
- out = err = ""
+ err = ""
return (out, err), proc