X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=bin%2FsalomeContext.py;h=04f960e31b69b98e77b3a6febf68a954989a8584;hb=17f89acccd51b2d2c86d44e70a1c053c10da0b3d;hp=605c9cd16a2357b57f406606d94c230f48247ec9;hpb=99e74fd518f74bb6e9404f54da8e753b218dbfd6;p=modules%2Fkernel.git diff --git a/bin/salomeContext.py b/bin/salomeContext.py index 605c9cd16..04f960e31 100755 --- a/bin/salomeContext.py +++ b/bin/salomeContext.py @@ -1,5 +1,5 @@ #! /usr/bin/env python3 -# Copyright (C) 2013-2022 CEA/DEN, EDF R&D, OPEN CASCADE +# Copyright (C) 2013-2024 CEA, EDF, OPEN CASCADE # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -33,9 +33,10 @@ import platform from salomeContextUtils import SalomeContextException -def usage(): +def usage(appended_cmd_doc = "", appended_opt_doc = ""): + add_in_help = {"appended_cmd_doc":appended_cmd_doc,"appended_opt_doc":appended_opt_doc} msg = '''\ -Usage: salome [command] [options] [--config=] +Usage: salome [command] [options] [--config=] [--with-env-modules=] Commands: ========= @@ -58,7 +59,7 @@ Commands: Port numbers must be separated by blank characters. killall Terminate *all* SALOME running SWS instances for current user. Do not start a new one. - +%(appended_cmd_doc)s If no command is given, default is start. Command options: @@ -71,9 +72,15 @@ Command options: Initialize SALOME context from a list of context files and/or a list of folders containing context files. The list is comma-separated, without any blank characters. + +--with-env-modules= +================================================ + Initialize SALOME context with the provided additional environment modules. + The list is comma-separated, without any blank characters. +%(appended_opt_doc)s ''' - print(msg) + print(msg%add_in_help) # """ @@ -111,7 +118,7 @@ class SalomeContext: raise SalomeContextException("Module environment not present") return try: - out, err = subprocess.Popen([modulecmd, "python", "load"] + env_modules, stdout=subprocess.PIPE).communicate() + out, err = subprocess.Popen([modulecmd, "python", "try-load"] + env_modules, stdout=subprocess.PIPE).communicate() exec(out) # define specific environment variables except Exception: raise SalomeContextException("Failed to load env modules: %s ..." % ' '.join(env_modules)) @@ -226,6 +233,30 @@ class SalomeContext: os.environ[name] = env + separator + value return + """Remove value from environment variable""" + def removeFromVariable(self, name, value, separator=os.pathsep): + if value == '': + return + + value = os.path.expandvars(value) # expand environment variables + self.getLogger().debug("Remove from %s: %s", name, value) + env = os.getenv(name, None) + if env == value: + env = '' + else: + # env = env.removeprefix(value + separator) (Python >= 3.9) + str = value + separator + if env.startswith(str): + env = env[len(str):] + # env = env.removesuffix(separator + value) (Python >= 3.9) + str = separator + value + if env.endswith(str): + env = env[:-len(str)] + env = env.replace(separator + value + separator, ':') + + os.environ[name] = env + # + ################################### # This begins the private section # ################################### @@ -427,7 +458,7 @@ class SalomeContext: def _runRemote(self, args=None): if args is None: args = [] -# complete salome environment +# complete salome environment sys.argv = ['runRemote'] import setenv setenv.main(True)