diff --git a/km3buu/ctrl.py b/km3buu/ctrl.py index d696530dec1c1f3c5c18be24d1c0fa55c9c94af3..2892f2a1bf42cd3d3fb41aa4e2125f4cd28c8033 100644 --- a/km3buu/ctrl.py +++ b/km3buu/ctrl.py @@ -13,6 +13,7 @@ __email__ = "jschumann@km3net.de" __status__ = "Development" from shutil import copy +import subprocess from spython.main import Client from os.path import join, abspath, basename, isdir, isfile from tempfile import NamedTemporaryFile, TemporaryDirectory @@ -47,7 +48,7 @@ $CONTAINER_GIBUU_EXEC < {1}; """ -def run_jobcard(jobcard, outdir): +def run_jobcard(jobcard, outdir, container=False): """ Method for run @@ -58,6 +59,8 @@ def run_jobcard(jobcard, outdir): of a jobcard object or a path to a jobcard outdir: str The path to the directory the output should be written to. + container: boolean + Call GiBUU inside container environment """ input_dir = TemporaryDirectory() outdir = abspath(outdir) @@ -80,23 +83,29 @@ def run_jobcard(jobcard, outdir): jobcard["neutrino_induced"]["FileNameflux"] = tmp_fluxfile with open(jobcard_fpath, "w") as f: f.write(str(jobcard)) - log.info("Create temporary file for associated runscript") - script_fpath = join(input_dir.name, "run.sh") - with open(script_fpath, "w") as f: - ctnt = GIBUU_SHELL.format(outdir, jobcard_fpath) - f.write(ctnt) - output = Client.execute( - Config().gibuu_image_path, - ["/bin/sh", script_fpath], - bind=[outdir, input_dir.name], - return_result=True, - ) - with open(join(outdir, jobcard.filename), "w") as f: - f.write(str(jobcard)) - msg = output["message"] - if isinstance(msg, str): - log.info("GiBUU output:\n %s" % msg) + if container: + log.info("Create temporary file for associated runscript") + script_fpath = join(input_dir.name, "run.sh") + with open(script_fpath, "w") as f: + ctnt = GIBUU_SHELL.format(outdir, jobcard_fpath) + f.write(ctnt) + output = Client.execute( + Config().gibuu_image_path, + ["/bin/sh", script_fpath], + bind=[outdir, input_dir.name], + return_result=True, + ) + with open(join(outdir, jobcard.filename), "w") as f: + f.write(str(jobcard)) + msg = output["message"] + if isinstance(msg, str): + log.info("GiBUU output:\n %s" % msg) + else: + log.info("GiBUU output:\n %s" % msg[0]) + log.error("GiBUU stacktrace:\n%s" % msg[1]) + return output["return_code"] else: - log.info("GiBUU output:\n %s" % msg[0]) - log.error("GiBUU stacktrace:\n%s" % msg[1]) - return output["return_code"] + p = subprocess.Popen( + [os.environ["CONTAINER_GIBUU_EXEC"], "<", jobcard_fpath], + cwd=outdir) + return p.wait()