X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=bin%2FsalomeContext.py;h=0d65b379716650abefb1879ed79baa32c02d5b46;hb=63adcbd0efaf06dbbe685b35644eeaa0e6657ba4;hp=2e63384f26fc032e2fb6ee6ffb3fe2687f0c588f;hpb=a81e67e6df57ccf6ff99be23a3a5c79e29d99a49;p=modules%2Fkernel.git diff --git a/bin/salomeContext.py b/bin/salomeContext.py index 2e63384f2..0d65b3797 100644 --- a/bin/salomeContext.py +++ b/bin/salomeContext.py @@ -20,7 +20,7 @@ import os import sys import logging -import ConfigParser +import configparser from parseConfigFile import parseConfigFile @@ -64,11 +64,11 @@ Command options: --config= ========================== Initialize SALOME context from a list of context files and/or a list - of folders containing context files. The list is comma-separated, whithout + of folders containing context files. The list is comma-separated, without any blank characters. ''' - print msg + print(msg) # """ @@ -84,14 +84,14 @@ class SalomeContext: """ 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 [] if len(configFileNames) == 0: raise SalomeContextException("No configuration files given") - reserved=['PATH', 'DYLD_FALLBACK_LIBRARY_PATH', 'DYLD_LIBRARY_PATH', 'LD_LIBRARY_PATH', 'PYTHONPATH', 'MANPATH', 'PV_PLUGIN_PATH', 'INCLUDE', 'LIBPATH', 'SALOME_PLUGINS_PATH', 'LIBRARY_PATH'] + reserved=['PATH', 'DYLD_FALLBACK_LIBRARY_PATH', 'DYLD_LIBRARY_PATH', 'LD_LIBRARY_PATH', 'PYTHONPATH', 'MANPATH', 'PV_PLUGIN_PATH', 'INCLUDE', 'LIBPATH', 'SALOME_PLUGINS_PATH', 'LIBRARY_PATH', 'QT_PLUGIN_PATH'] for filename in configFileNames: basename, extension = os.path.splitext(filename) if extension == ".cfg": @@ -100,14 +100,14 @@ class SalomeContext: 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() - exec out # define specific environment variables - print " OK" + out, err = subprocess.Popen(["modulecmd", "python", "load"] + env_modules, stdout=subprocess.PIPE).communicate() + exec(out) # define specific environment variables + print("OK") except: - print " ** Failed **" + print("** Failed **") pass # @@ -115,20 +115,22 @@ class SalomeContext: 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() - proc = subprocess.Popen(['python', os.path.join(absoluteAppliPath,"bin","salome","salomeContext.py"), pickle.dumps(self), pickle.dumps(args)], 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 # @@ -222,7 +224,7 @@ class SalomeContext: 'car' : '_getCar', } - if not command in availableCommands.keys(): + if command not in availableCommands: command = "start" options = args @@ -231,7 +233,7 @@ class SalomeContext: """ 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): @@ -260,19 +262,19 @@ class SalomeContext: try: res = getattr(self, command)(options) # run appropriate method - return res or (None, None) - except SystemExit, returncode: - if returncode != 0: - self.getLogger().error("SystemExit %s in method %s.", returncode, command) - return returncode - except StandardError: + return res or 0 + 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, e: - self.getLogger().error(e) - return 1 # def __setContextFromConfigFile(self, filename, reserved=None): @@ -280,7 +282,7 @@ class SalomeContext: reserved = [] try: unsetVars, configVars, reservedDict = parseConfigFile(filename, reserved) - except SalomeContextException, e: + except SalomeContextException as e: msg = "%s"%e self.getLogger().error(msg) return 1 @@ -291,7 +293,7 @@ class SalomeContext: # set context for reserved in reservedDict: - a = filter(None, reservedDict[reserved]) # remove empty elements + a = [_f for _f in reservedDict[reserved] if _f] # remove empty elements a = [ os.path.realpath(x) for x in a ] reformattedVals = os.pathsep.join(a) if reserved in ["INCLUDE", "LIBPATH"]: @@ -319,26 +321,28 @@ class SalomeContext: import runSalome runSalome.runSalome() + return 0 # def _setContext(self, args=None): salome_context_set = os.getenv("SALOME_CONTEXT_SET") if salome_context_set: - print "***" - print "*** SALOME context has already been set." - print "*** Enter 'exit' (only once!) to leave SALOME context." - print "***" - return + print("***") + print("*** SALOME context has already been set.") + print("*** Enter 'exit' (only once!) to leave SALOME context.") + print("***") + return 0 os.environ["SALOME_CONTEXT_SET"] = "yes" - print "***" - print "*** SALOME context is now set." - print "*** Enter 'exit' (only once!) to leave SALOME context." - print "***" + print("***") + print("*** SALOME context is now set.") + print("*** Enter 'exit' (only once!) to leave SALOME context.") + 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): @@ -372,8 +376,8 @@ class SalomeContext: args = [] ports = args if not ports: - print "Port number(s) not provided to command: salome kill " - return + print("Port number(s) not provided to command: salome kill ") + return 1 from multiprocessing import Process from killSalomeWithPort import killMyPort @@ -383,7 +387,7 @@ class SalomeContext: p = Process(target = killMyPort, args=(port,)) p.start() p.join() - pass + return 0 # def _killAll(self, unused=None): @@ -405,6 +409,7 @@ class SalomeContext: from killSalome import killAllPorts killAllPorts() pass + return 0 # def _runTests(self, args=None): @@ -419,7 +424,7 @@ class SalomeContext: # def _showSoftwareVersions(self, softwares=None): - config = ConfigParser.SafeConfigParser() + config = configparser.SafeConfigParser() absoluteAppliPath = os.getenv('ABSOLUTE_APPLI_PATH') filename = os.path.join(absoluteAppliPath, "sha1_collections.txt") versions = {} @@ -437,13 +442,13 @@ class SalomeContext: pass if softwares: for soft in softwares: - if versions.has_key(soft.upper()): - print soft.upper().rjust(max_len), versions[soft.upper()] + if soft.upper() in versions: + print(soft.upper().rjust(max_len), versions[soft.upper()]) else: import collections od = collections.OrderedDict(sorted(versions.items())) - for name, version in od.iteritems(): - print name.rjust(max_len), versions[name] + for name, version in od.items(): + print(name.rjust(max_len), versions[name]) pass def _showInfo(self, args=None): @@ -465,8 +470,8 @@ Available options are: args = ["--version"] if "-h" in args or "--help" in args: - print usage + epilog - return + print(usage + epilog) + return 0 if "-p" in args or "--ports" in args: import PortManager @@ -474,17 +479,17 @@ Available options are: this_ports = ports['this'] other_ports = ports['other'] if this_ports or other_ports: - print "SALOME instances are running on the following ports:" + print("SALOME instances are running on the following ports:") if this_ports: - print " This application:", this_ports + print(" This application:", this_ports) else: - print " No SALOME instances of this application" + print(" No SALOME instances of this application") if other_ports: - print " Other applications:", other_ports + print(" Other applications:", other_ports) else: - print " No SALOME instances of other applications" + print(" No SALOME instances of other applications") else: - print "No SALOME instances are running" + print("No SALOME instances are running") if "-s" in args or "--softwares" in args: if "-s" in args: @@ -497,8 +502,10 @@ Available options are: self._showSoftwareVersions(softwares=args[index+1:indexEnd]) if "-v" in args or "--version" in args: - print "Running with python", platform.python_version() - self._runAppli(["--version"]) + print("Running with python", platform.python_version()) + return self._runAppli(["--version"]) + + return 0 # def _showDoc(self, args=None): @@ -507,8 +514,8 @@ Available options are: modules = args if not modules: - print "Module(s) not provided to command: salome doc " - return + print("Module(s) not provided to command: salome doc ") + return 1 appliPath = os.getenv("ABSOLUTE_APPLI_PATH") if not appliPath: @@ -523,71 +530,71 @@ Available options are: if os.path.isfile(docfile): out, err = subprocess.Popen(["xdg-open", docfile]).communicate() else: - print "Online documentation is not accessible for module:", module + print("Online documentation is not accessible for module:", module) def _usage(self, unused=None): usage() # def _makeCoffee(self, unused=None): - print " (" - print " ) (" - print " ___...(-------)-....___" - print " .-\"\" ) ( \"\"-." - print " .-\'``\'|-._ ) _.-|" - print " / .--.| `\"\"---...........---\"\"` |" - print " / / | |" - print " | | | |" - print " \\ \\ | |" - print " `\\ `\\ | |" - print " `\\ `| SALOME |" - print " _/ /\\ 4 EVER /" - print " (__/ \\ <3 /" - print " _..---\"\"` \\ /`\"\"---.._" - print " .-\' \\ / \'-." - print " : `-.__ __.-\' :" - print " : ) \"\"---...---\"\" ( :" - print " \'._ `\"--...___...--\"` _.\'" - print " \\\"\"--..__ __..--\"\"/" - print " \'._ \"\"\"----.....______.....----\"\"\" _.\'" - print " `\"\"--..,,_____ _____,,..--\"\"`" - print " `\"\"\"----\"\"\"`" - print "" - print " SALOME is working for you; what else?" - print "" + print(" (") + print(" ) (") + print(" ___...(-------)-....___") + print(" .-\"\" ) ( \"\"-.") + print(" .-\'``\'|-._ ) _.-|") + print(" / .--.| `\"\"---...........---\"\"` |") + print(" / / | |") + print(" | | | |") + print(" \\ \\ | |") + print(" `\\ `\\ | |") + print(" `\\ `| SALOME |") + print(" _/ /\\ 4 EVER /") + print(" (__/ \\ <3 /") + print(" _..---\"\"` \\ /`\"\"---.._") + print(" .-\' \\ / \'-.") + print(" : `-.__ __.-\' :") + print(" : ) \"\"---...---\"\" ( :") + print(" \'._ `\"--...___...--\"` _.\'") + print(" \\\"\"--..__ __..--\"\"/") + print(" \'._ \"\"\"----.....______.....----\"\"\" _.\'") + print(" `\"\"--..,,_____ _____,,..--\"\"`") + print(" `\"\"\"----\"\"\"`") + print("") + print(" SALOME is working for you; what else?") + print("") # def _getCar(self, unused=None): - print " _____________" - print " ..---:::::::-----------. ::::;;." - print " .\'\"\"\"\"\"\" ;; \\ \":." - print " .\'\' ; \\ \"\\__." - print " .\' ;; ; \\\\\";" - print " .\' ; _____; \\\\/" - print " .\' :; ;\" \\ ___:\'." - print " .\'--........................... : = ____:\" \\ \\" - print " ..-\"\" \"\"\"\' o\"\"\" ; ; :" - print " .--\"\" .----- ..----... _.- --. ..-\" ; ; ; ;" - print " .\"\"_- \"--\"\"-----\'\"\" _-\" .-\"\" ; ; .-." - print " .\' .\' SALOME .\" .\" ; ; /. |" - print " /-./\' 4 EVER <3 .\" / _.. ; ; ;;;|" - print " : ;-.______ / _________==. /_ \\ ; ; ;;;;" - print " ; / | \"\"\"\"\"\"\"\"\"\"\".---.\"\"\"\"\"\"\" : /\" \". |; ; _; ;;;" - print " /\"-/ | / / / / ;|; ;-\" | ;\';" - print ":- : \"\"\"----______ / / ____. . .\"\'. ;; .-\"..T\" ." - print "\'. \" ___ \"\": \'\"\"\"\"\"\"\"\"\"\"\"\"\"\" . ; ; ;; ;.\" .\" \'--\"" - print " \", __ \"\"\" \"\"---... :- - - - - - - - - \' \' ; ; ; ;;\" .\"" - print " /. ; \"\"\"---___ ; ; ; ;|.\"\"" - print " : \": \"\"\"----. .-------. ; ; ; ;:" - print " \\ \'--__ \\ \\ \\ / | ; ;;" - print " \'-.. \"\"\"\"---___ : .______..\\ __/..-\"\"| ; ; ;" - print " \"\"--.. \"\"\"--\" m l s . \". . ;" - print " \"\"------... ..--\"\" \" :" - print " \"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\" \\ /" - print " \"------\"" - print "" - print " Drive your simulation properly with SALOME!" - print "" + print(" _____________") + print(" ..---:::::::-----------. ::::;;.") + print(" .\'\"\"\"\"\"\" ;; \\ \":.") + print(" .\'\' ; \\ \"\\__.") + print(" .\' ;; ; \\\\\";") + print(" .\' ; _____; \\\\/") + print(" .\' :; ;\" \\ ___:\'.") + print(" .\'--........................... : = ____:\" \\ \\") + print(" ..-\"\" \"\"\"\' o\"\"\" ; ; :") + print(" .--\"\" .----- ..----... _.- --. ..-\" ; ; ; ;") + print(" .\"\"_- \"--\"\"-----\'\"\" _-\" .-\"\" ; ; .-.") + print(" .\' .\' SALOME .\" .\" ; ; /. |") + print(" /-./\' 4 EVER <3 .\" / _.. ; ; ;;;|") + print(" : ;-.______ / _________==. /_ \\ ; ; ;;;;") + print(" ; / | \"\"\"\"\"\"\"\"\"\"\".---.\"\"\"\"\"\"\" : /\" \". |; ; _; ;;;") + print(" /\"-/ | / / / / ;|; ;-\" | ;\';") + print(":- : \"\"\"----______ / / ____. . .\"\'. ;; .-\"..T\" .") + print("\'. \" ___ \"\": \'\"\"\"\"\"\"\"\"\"\"\"\"\"\" . ; ; ;; ;.\" .\" \'--\"") + print(" \", __ \"\"\" \"\"---... :- - - - - - - - - \' \' ; ; ; ;;\" .\"") + print(" /. ; \"\"\"---___ ; ; ; ;|.\"\"") + print(" : \": \"\"\"----. .-------. ; ; ; ;:") + print(" \\ \'--__ \\ \\ \\ / | ; ;;") + print(" \'-.. \"\"\"\"---___ : .______..\\ __/..-\"\"| ; ; ;") + print(" \"\"--.. \"\"\"--\" m l s . \". . ;") + print(" \"\"------... ..--\"\" \" :") + print(" \"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\" \\ /") + print(" \"------\"") + print("") + print(" Drive your simulation properly with SALOME!") + print("") # # Add the following two methods since logger is not pickable @@ -613,10 +620,11 @@ Available options are: if __name__ == "__main__": if len(sys.argv) == 3: - context = pickle.loads(sys.argv[1]) - args = pickle.loads(sys.argv[2]) + context = pickle.loads(sys.argv[1].encode()) + args = pickle.loads(sys.argv[2].encode()) - context._startSalome(args) + status = context._startSalome(args) + sys.exit(status) else: usage() #