X-Git-Url: http://git.onelab.eu/?p=nepi.git;a=blobdiff_plain;f=nepi%2Fresources%2Flinux%2Fapplication.py;h=ba9bbc38384baace992fe8deb89daec28c30ff51;hp=94bd5e9305688514f10a6f07ac2b544b9edc9702;hb=40b568db5ed0ba760da8b14a00814db7d01a3944;hpb=6e711e2a04ab60b961907c49bf1368555cf93c78 diff --git a/nepi/resources/linux/application.py b/nepi/resources/linux/application.py index 94bd5e93..ba9bbc38 100644 --- a/nepi/resources/linux/application.py +++ b/nepi/resources/linux/application.py @@ -21,7 +21,7 @@ from nepi.execution.trace import Trace, TraceAttr from nepi.execution.resource import ResourceManager, clsinit_copy, \ ResourceState from nepi.resources.linux.node import LinuxNode -from nepi.util.sshfuncs import ProcStatus +from nepi.util.sshfuncs import ProcStatus, STDOUT from nepi.util.timefuncs import tnow, tdiffsec import os @@ -161,6 +161,10 @@ class LinuxApplication(ResourceManager): Attribute("tearDown", "Command to be executed just before releasing the resource", flags = Flags.Design)) + cls._register_attribute( + Attribute("splitStderr", + "requests stderr to be retrieved separately", + default = False)) @classmethod def _register_traces(cls): @@ -383,13 +387,20 @@ class LinuxApplication(ResourceManager): # in background ( but wait until the command has # finished to continue ) shfile = os.path.join(self.app_home, "{}.sh".format(prefix)) + # low-level spawn tools in both sshfuncs and execfuncs + # expect stderr=sshfuncs.STDOUT to mean std{out,err} are merged + stderr = "{}_stderr".format(prefix) \ + if self.get("splitStderr") \ + else STDOUT + print("{} : prefix = {}, command={}, stderr={}" + .format(self, prefix, command, stderr)) self.node.run_and_wait(command, self.run_home, shfile = shfile, overwrite = False, pidfile = "{}_pidfile".format(prefix), ecodefile = "{}_exitcode".format(prefix), stdout = "{}_stdout".format(prefix), - stderr = "{}_stderr".format(prefix)) + stderr = stderr) def upload_sources(self, sources = None, src_dir = None): if not sources: @@ -583,7 +594,11 @@ class LinuxApplication(ResourceManager): sudo = self.get("sudo") or False stdout = "stdout" - stderr = "stderr" + # low-level spawn tools in both sshfuncs and execfuncs + # expect stderr=sshfuncs.STDOUT to mean std{out,err} are merged + stderr = "stderr" \ + if self.get("splitStderr") \ + else STDOUT stdin = os.path.join(self.app_home, "stdin") if self.get("stdin") \ else None