"""
def __init__(self, configFileNames=0):
self.getLogger().setLevel(logging.INFO)
- #it could be None explicitely (if user use multiples setVariable...for standalone)
+ #it could be None explicitly (if user use multiples setVariable...for standalone)
if configFileNames is None:
return
configFileNames = configFileNames or []
self.getLogger().error("Unrecognized extension for configuration file: %s", filename)
#
- def __loadMPI(self, module_name):
- print("Trying to load MPI module: %s..."%module_name)
+ def __loadEnvModules(self, env_modules):
+ print("Trying to load env modules: %s..." % ' '.join(env_modules))
try:
- out, err = subprocess.Popen(["modulecmd", "python", "load", module_name], stdout=subprocess.PIPE).communicate()
+ out, err = subprocess.Popen(["modulecmd", "python", "load"] + env_modules, stdout=subprocess.PIPE).communicate()
exec(out) # define specific environment variables
- print(" OK")
+ print("OK")
except:
- print(" ** Failed **")
+ print("** Failed **")
pass
#
import os
# Run this module as a script, in order to use appropriate Python interpreter
# according to current path (initialized from context files).
- mpi_module_option = "--with-mpi-module="
- mpi_module = [x for x in args if x.startswith(mpi_module_option)]
- if mpi_module:
- mpi_module = mpi_module[0][len(mpi_module_option):]
- self.__loadMPI(mpi_module)
- args = [x for x in args if not x.startswith(mpi_module_option)]
+ env_modules_option = "--with-env-modules="
+ env_modules_l = [x for x in args if x.startswith(env_modules_option)]
+ if env_modules_l:
+ env_modules = env_modules_l[-1][len(env_modules_option):].split(',')
+ self.__loadEnvModules(env_modules)
+ args = [x for x in args if not x.startswith(env_modules_option)]
else:
- mpi_module = os.getenv("SALOME_MPI_MODULE_NAME", None)
- if mpi_module:
- self.__loadMPI(mpi_module)
+ env_modules = os.getenv("SALOME_ENV_MODULES", None)
+ if env_modules:
+ self.__loadEnvModules(env_modules.split(','))
absoluteAppliPath = os.getenv('ABSOLUTE_APPLI_PATH','')
env_copy = os.environ.copy()
- selfBytes= pickle.dumps(self,protocol=0)
- argsBytes= pickle.dumps(args,protocol=0)
- proc = subprocess.Popen(['python', os.path.join(absoluteAppliPath,"bin","salome","salomeContext.py"), selfBytes.decode(), argsBytes.decode()], shell=False, close_fds=True, env=env_copy)
+ selfBytes= pickle.dumps(self, protocol=0)
+ argsBytes= pickle.dumps(args, protocol=0)
+ proc = subprocess.Popen(['python3', os.path.join(absoluteAppliPath,"bin","salome","salomeContext.py"), selfBytes.decode(), argsBytes.decode()], shell=False, close_fds=True, env=env_copy)
out, err = proc.communicate()
return out, err, proc.returncode
#
"""
Run SALOME!
- Args consist in a mandatory command followed by optionnal parameters.
+ Args consist in a mandatory command followed by optional parameters.
See usage for details on commands.
"""
def _startSalome(self, args):
try:
res = getattr(self, command)(options) # run appropriate method
return res or 0
- except SystemExit as returncode:
- if returncode != 0:
- self.getLogger().error("SystemExit %s in method %s.", returncode, command)
- return returncode
+ except SystemExit as ex:
+ if ex.code != 0:
+ self.getLogger().error("SystemExit %s in method %s.", ex.code, command)
+ return ex.code
+ except SalomeContextException as e:
+ self.getLogger().error(e)
+ return 1
except Exception:
self.getLogger().error("Unexpected error:")
import traceback
traceback.print_exc()
return 1
- except SalomeContextException as e:
- self.getLogger().error(e)
- return 1
#
def __setContextFromConfigFile(self, filename, reserved=None):
import runSalome
runSalome.runSalome()
+ return 0
#
def _setContext(self, args=None):
print("*** SALOME context has already been set.")
print("*** Enter 'exit' (only once!) to leave SALOME context.")
print("***")
- return
+ return 0
os.environ["SALOME_CONTEXT_SET"] = "yes"
print("***")
cmd = ["/bin/bash"]
proc = subprocess.Popen(cmd, shell=False, close_fds=True)
- return proc.communicate()
+ proc.communicate()
+ return proc.returncode
#
def _runSession(self, args=None):
ports = args
if not ports:
print("Port number(s) not provided to command: salome kill <port(s)>")
- return
+ return 1
from multiprocessing import Process
from killSalomeWithPort import killMyPort
p = Process(target = killMyPort, args=(port,))
p.start()
p.join()
- pass
+ return 0
#
def _killAll(self, unused=None):
from killSalome import killAllPorts
killAllPorts()
pass
+ return 0
#
def _runTests(self, args=None):
if "-h" in args or "--help" in args:
print(usage + epilog)
- return
+ return 0
if "-p" in args or "--ports" in args:
import PortManager
if "-v" in args or "--version" in args:
print("Running with python", platform.python_version())
- self._runAppli(["--version"])
+ return self._runAppli(["--version"])
+
+ return 0
#
def _showDoc(self, args=None):
modules = args
if not modules:
print("Module(s) not provided to command: salome doc <module(s)>")
- return
+ return 1
appliPath = os.getenv("ABSOLUTE_APPLI_PATH")
if not appliPath: