X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=bin%2FrunSalome.py;h=3aa96b0927c2cabe72c8100eaa10598b31126a90;hb=ee44cdc8da140e8f0aabaa1b9d9485939899cfdf;hp=4b3a42530b4ae5ac20ea08daef29269a0caad9b4;hpb=58e310de7bb9fbae2a19cb07ccbc0d0470b5a865;p=modules%2Fkernel.git diff --git a/bin/runSalome.py b/bin/runSalome.py index 4b3a42530..3aa96b092 100755 --- a/bin/runSalome.py +++ b/bin/runSalome.py @@ -1,6 +1,6 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # -*- coding: iso-8859-1 -*- -# Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE +# Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE # # Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, # CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS @@ -8,7 +8,7 @@ # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either -# version 2.1 of the License. +# version 2.1 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -33,6 +33,7 @@ from launchConfigureParser import verbose from server import process_id, Server import json import subprocess +from salomeContextUtils import ScriptAndArgsObjectEncoder # ----------------------------------------------------------------------------- @@ -40,7 +41,7 @@ from killSalome import killAllPorts def killLocalPort(): """ - kill servers from a previous SALOME exection, if needed, + kill servers from a previous SALOME execution, if needed, on the CORBA port given in args of runSalome """ @@ -49,13 +50,13 @@ def killLocalPort(): try: killMyPort(my_port) except: - print "problem in killLocalPort()" + print("problem in killLocalPort()") pass pass def givenPortKill(port): """ - kill servers from a previous SALOME exection, if needed, + kill servers from a previous SALOME execution, if needed, on the same CORBA port """ @@ -64,7 +65,7 @@ def givenPortKill(port): try: killMyPort(my_port) except: - print "problem in LocalPortKill(), killMyPort(%s)"%port + print("problem in LocalPortKill(), killMyPort(%s)"%port) pass pass @@ -88,21 +89,21 @@ def kill_salome(args): class InterpServer(Server): def __init__(self,args): self.args=args - if sys.platform != "win32": - env_ld_library_path=['env', 'LD_LIBRARY_PATH=' + os.getenv("LD_LIBRARY_PATH")] - self.CMD=['xterm', '-e']+ env_ld_library_path + ['python'] - else: + if sys.platform == "win32": self.CMD=['cmd', '/c', 'start cmd.exe', '/K', 'python'] + elif sys.platform == "darwin": + env_ld_library_path=['env', 'DYLD_LIBRARY_PATH=' + os.getenv("LD_LIBRARY_PATH")] + self.CMD=['xterm', '-e'] + env_ld_library_path + ['python'] + else: + env_ld_library_path=['env', 'LD_LIBRARY_PATH=' + os.getenv("LD_LIBRARY_PATH")] + self.CMD=['xterm', '-e'] + env_ld_library_path + ['python'] def run(self): global process_id command = self.CMD - print "INTERPSERVER::command = ", command - if sys.platform == "win32": - import win32pm - pid = win32pm.spawnpid( string.join(command, " "),'-nc' ) - else: - pid = os.spawnvp(os.P_NOWAIT, command[0], command) + print("INTERPSERVER::command = ", command) + import subprocess + pid = subprocess.Popen(command).pid process_id[pid]=self.CMD self.PID = pid @@ -115,7 +116,7 @@ def get_cata_path(list_modules,modules_root_dir): cata_path=[] for module in list_modules: - if modules_root_dir.has_key(module): + if module in modules_root_dir: module_root_dir=modules_root_dir[module] module_cata=module+"Catalog.xml" cata_file=os.path.join(module_root_dir, "share",setenv.salome_subdir, "resources",module.lower(), module_cata) @@ -133,35 +134,12 @@ def get_cata_path(list_modules,modules_root_dir): if os.path.exists(path): for cata_file in glob.glob(os.path.join(path,"*Catalog.xml")): module_name= os.path.basename(cata_file)[:-11] - if not modules_cata.has_key(module_name): + if module_name not in modules_cata: cata_path.append(cata_file) modules_cata[module_name]=cata_file return cata_path -_siman_name = None -def simanStudyName(args): - global _siman_name - if _siman_name is None: - # siman session paramenters and checkout processing - _siman_name = "" - if 'siman' in args: - siman_data = [] - for param in [ 'study', 'scenario', 'user']: - siman_param = "siman_%s"%param - if siman_param in args: - siman_data.append(args[siman_param]) - else: - print "SIMAN %s must be defined using parameter --siman-%s=XXX" % (siman_param, siman_param) - pass - pass - if len(siman_data) == 3: - _siman_name = "_".join(siman_data) - pass - pass - pass - return _siman_name - class CatalogServer(Server): def __init__(self,args): self.args=args @@ -182,7 +160,7 @@ class CatalogServer(Server): cata_path=get_cata_path(list_modules,modules_root_dir) - self.CMD=self.SCMD1 + ['"' + string.join(cata_path,'"::"') + '"'] + self.SCMD2 + self.CMD=self.SCMD1 + ['"' + '"::"'.join(cata_path) + '"'] + self.SCMD2 # --- @@ -211,10 +189,18 @@ class RegistryServer(Server): # --- class ContainerCPPServer(Server): - def __init__(self,args): + def __init__(self,args,with_gui=False): self.args=args self.initArgs() self.CMD=['SALOME_Container','FactoryServer'] + if not with_gui and self.args["valgrind_session"]: + l = ["valgrind"] + val = os.getenv("VALGRIND_OPTIONS") + if val: + l += val.split() + pass + self.CMD = l + self.CMD + pass # --- @@ -222,19 +208,17 @@ class LoggerServer(Server): def __init__(self,args): self.args=args self.initArgs() - from salome_utils import generateFileName - if sys.platform == "win32": dirpath = os.environ["HOME"] - else: dirpath = "/tmp" - logfile = generateFileName( dirpath, + from salome_utils import generateFileName, getLogDir + logfile = generateFileName( getLogDir(), prefix="logger", extension="log", with_username=True, with_hostname=True, with_port=True) - print "===========================================================" - print "Logger server: put log to the file:" - print logfile - print "===========================================================" + print("===========================================================") + print("Logger server: put log to the file:") + print(logfile) + print("===========================================================") self.CMD=['SALOME_Logger_Server', logfile] pass pass # end of LoggerServer class @@ -272,7 +256,7 @@ class SessionServer(Server): raise Exception('Python containers no longer supported') if self.args['gui']: session_gui = True - if self.args.has_key('session_gui'): + if 'session_gui' in self.args: session_gui = self.args['session_gui'] if session_gui: self.SCMD2+=['GUI'] @@ -282,21 +266,18 @@ class SessionServer(Server): if self.args['study_hdf'] is not None: self.SCMD2+=['--study-hdf=%s'%self.args['study_hdf']] pass - if simanStudyName(self.args): - self.SCMD2+=['--siman-study=%s'%simanStudyName(self.args)] - pass pass - if self.args.has_key('pyscript') and len(self.args['pyscript']) > 0: - msg = json.dumps(self.args['pyscript']) + if 'pyscript' in self.args and len(self.args['pyscript']) > 0: + msg = json.dumps(self.args['pyscript'], cls=ScriptAndArgsObjectEncoder) self.SCMD2+=['--pyscript=%s'%(msg)] pass pass pass if self.args['noexcepthandler']: self.SCMD2+=['noexcepthandler'] - if self.args.has_key('user_config'): + if 'user_config' in self.args: self.SCMD2+=['--resources=%s'%self.args['user_config']] - if self.args.has_key('modules'): + if 'modules' in self.args: list_modules = [] #keep only modules with GUI for m in modules_list: @@ -310,6 +291,8 @@ class SessionServer(Server): list_modules.reverse() self.SCMD2+=['--modules (%s)' % ":".join(list_modules)] pass + if 'language' in self.args: + self.SCMD2+=['--language=%s' % self.args['language']] pass def setpath(self,modules_list,modules_root_dir): @@ -322,14 +305,14 @@ class SessionServer(Server): cata_path=get_cata_path(list_modules,modules_root_dir) - if (self.args["gui"]) & ('moduleCatalog' in self.args['embedded']): + if ("gui" in self.args) & ('moduleCatalog' in self.args['embedded']): #Use '::' instead ":" because drive path with "D:\" is invalid on windows platform - self.CMD=self.SCMD1 + ['"' + string.join(cata_path,'"::"') + '"'] + self.SCMD2 + self.CMD=self.SCMD1 + ['"' + '"::"'.join(cata_path) + '"'] + self.SCMD2 else: self.CMD=self.SCMD1 + self.SCMD2 - if self.args.has_key('test'): + if 'test' in self.args: self.CMD+=['-test'] + self.args['test'] - elif self.args.has_key('play'): + elif 'play' in self.args: self.CMD+=['-play'] + self.args['play'] if self.args["gdb_session"] or self.args["ddd_session"]: @@ -388,26 +371,11 @@ class LauncherServer(Server): cata_path=get_cata_path(list_modules,modules_root_dir) - if (self.args["gui"]) & ('moduleCatalog' in self.args['embedded']): + if ("gui" in self.args) & ('moduleCatalog' in self.args['embedded']): #Use '::' instead ":" because drive path with "D:\" is invalid on windows platform - self.CMD=self.SCMD1 + ['"' + string.join(cata_path,'"::"') + '"'] + self.SCMD2 + self.CMD=self.SCMD1 + ['"' + '"::"'.join(cata_path) + '"'] + self.SCMD2 else: self.CMD=self.SCMD1 + self.SCMD2 - -class NotifyServer(Server): - def __init__(self,args,modules_root_dir): - self.args=args - self.initArgs() - self.modules_root_dir=modules_root_dir - myLogName = os.environ["LOGNAME"] - self.CMD=['notifd','-c', - self.modules_root_dir["KERNEL"] +'/share/salome/resources/kernel/channel.cfg', - '-DFactoryIORFileName=/tmp/'+myLogName+'_rdifact.ior', - '-DChannelIORFileName=/tmp/'+myLogName+'_rdichan.ior', - '-DReportLogFile=/tmp/'+myLogName+'_notifd.report', - '-DDebugLogFile=/tmp/'+myLogName+'_notifd.debug', - ] - # # ----------------------------------------------------------------------------- @@ -427,12 +395,12 @@ def startSalome(args, modules_list, modules_root_dir): """Launch all SALOME servers requested by args""" init_time = os.times() - if verbose(): print "startSalome ", args + if verbose(): print("startSalome ", args) # # Set server launch command # - if args.has_key('server_launch_mode'): + if 'server_launch_mode' in args: Server.set_server_launch_mode(args['server_launch_mode']) # @@ -491,15 +459,6 @@ def startSalome(args, modules_list, modules_root_dir): args["session_object"] = session return clt - # Save Naming service port name into - # the file args["ns_port_log_file"] - if args.has_key('ns_port_log_file'): - omniorbUserPath = os.getenv("OMNIORB_USER_PATH") - file_name = os.path.join(omniorbUserPath, args["ns_port_log_file"]) - f = open(file_name, "w") - f.write(os.environ['NSPORT']) - f.close() - # Launch Logger Server (optional) # and wait until it is registered in naming service # @@ -509,21 +468,6 @@ def startSalome(args, modules_list, modules_root_dir): myServer.run() clt.waitLogger("Logger") - # Notify Server launch - # - - if sys.platform != "win32": - if verbose(): print "Notify Server to launch" - - myServer=NotifyServer(args,modules_root_dir) - myServer.run() - - # set siman python path before the session server launching to import scripts inside python console - if simanStudyName(args): - # MPV: use os.environ here because session server is launched in separated process and sys.path is missed in this case - os.environ["PYTHONPATH"] = "/tmp/SimanSalome/" + args['siman_study'] + "/" + \ - args['siman_scenario'] + "/" + args['siman_user'] + os.pathsep + os.environ["PYTHONPATH"]; - # Launch Session Server (to show splash ASAP) # @@ -565,15 +509,15 @@ def startSalome(args, modules_list, modules_root_dir): # and wait until it is registered in naming service # - #print "ARGS = ",args + # print("ARGS = ",args) if ('study' not in args['embedded']) | (args["gui"] == 0): - print "RunStudy" + print("RunStudy") myServer=SalomeDSServer(args) myServer.run() if sys.platform == "win32": - clt.waitNS("/myStudyManager") + clt.waitNS("/Study") else: - clt.waitNSPID("/myStudyManager",myServer.PID) + clt.waitNSPID("/Study",myServer.PID) # # Launch LauncherServer @@ -607,7 +551,7 @@ def startSalome(args, modules_list, modules_root_dir): # if ('cppContainer' in args['standalone']) | (args["gui"] == 0) : - myServer=ContainerCPPServer(args) + myServer=ContainerCPPServer(args, with_gui=args["gui"]!=0) myServer.run() if sys.platform == "win32": clt.waitNS("/Containers/" + theComputer + "/FactoryServer") @@ -634,16 +578,16 @@ def startSalome(args, modules_list, modules_root_dir): session=clt.waitNSPID("/Kernel/Session",mySessionServ.PID,SALOME.Session) args["session_object"] = session end_time = os.times() - if verbose(): print - print "Start SALOME, elapsed time : %5.1f seconds"% (end_time[4] - - init_time[4]) + if verbose(): print() + print("Start SALOME, elapsed time : %5.1f seconds"% (end_time[4] + - init_time[4])) # ASV start GUI without Loader #if args['gui']: # session.GetInterface() # - # additionnal external python interpreters + # additional external python interpreters # nbaddi=0 @@ -653,14 +597,14 @@ def startSalome(args, modules_list, modules_root_dir): except: import traceback traceback.print_exc() - print "-------------------------------------------------------------" - print "-- to get an external python interpreter:runSalome --interp=1" - print "-------------------------------------------------------------" + print("-------------------------------------------------------------") + print("-- to get an external python interpreter:runSalome --interp=1") + print("-------------------------------------------------------------") - if verbose(): print "additional external python interpreters: ", nbaddi + if verbose(): print("additional external python interpreters: ", nbaddi) if nbaddi: for i in range(nbaddi): - print "i=",i + print("i=",i) anInterp=InterpServer(args) anInterp.run() @@ -672,27 +616,6 @@ def startSalome(args, modules_list, modules_root_dir): except ImportError: pass - # siman session paramenters and checkout processing - if simanStudyName(args): - print '**********************************************' - print "Siman study name= '" + simanStudyName(args) + "'" - import SALOMEDS - obj = clt.Resolve('myStudyManager') - myStudyManager = obj._narrow(SALOMEDS.StudyManager) - aNewStudy = myStudyManager.NewStudy(simanStudyName(args)) - aSimS = myStudyManager.GetSimanStudy() - aSimS._set_StudyId(args['siman_study']) - aSimS._set_ScenarioId(args['siman_scenario']) - aSimS._set_UserId(args['siman_user']) - aSimS.CheckOut(aNewStudy) - # if session server is enabled, activate the created study - if args["gui"]: - print "Activate the SIMAN study in the SALOME GUI" - obj = clt.Resolve('/Kernel/Session') - mySession = obj._narrow(SALOME.Session) - mySession.emitMessage("simanCheckoutDone " + simanStudyName(args)) - print '**********************************************' - return clt # ----------------------------------------------------------------------------- @@ -711,21 +634,21 @@ def useSalome(args, modules_list, modules_root_dir): except: import traceback traceback.print_exc() - print - print - print "--- Error during Salome launch ---" + print() + print() + print("--- Error during Salome launch ---") - #print process_id + # print(process_id) from addToKillList import addToKillList from killSalomeWithPort import getPiDict filedict = getPiDict(args['port']) - for pid, cmd in process_id.items(): + for pid, cmd in list(process_id.items()): addToKillList(pid, cmd, args['port']) pass - if verbose(): print """ + if verbose(): print(""" Saving of the dictionary of Salome processes in %s To kill SALOME processes from a console (kill all sessions from all ports): python killSalome.py @@ -737,7 +660,7 @@ def useSalome(args, modules_list, modules_root_dir): runSalome, with --killall option, starts with killing the processes resulting from the previous execution. - """%filedict + """%filedict) # # Print Naming Service directory list @@ -745,8 +668,8 @@ def useSalome(args, modules_list, modules_root_dir): if clt != None: if verbose(): - print - print " --- registered objects tree in Naming Service ---" + print() + print(" --- registered objects tree in Naming Service ---") clt.showNS() pass @@ -762,18 +685,25 @@ def useSalome(args, modules_list, modules_root_dir): self.killSalomeWithPort.killMyPort(self.port) return pass - args['shutdown_servers'] = __utils__(args['port']) + def func(s): + del s + import atexit + atexit.register(func, __utils__(args['port'])) pass pass # run python scripts, passed as command line arguments toimport = [] - if args.has_key('pyscript'): - if args.has_key('gui') and args.has_key('session_gui'): - if not args['gui'] or not args['session_gui']: + if 'gui' in args and 'session_gui' in args: + if not args['gui'] or not args['session_gui']: + if 'study_hdf' in args: + toopen = args['study_hdf'] + if toopen: + import salome + salome.salome_init(path=toopen) + if 'pyscript' in args: toimport = args['pyscript'] - - from salomeLauncherUtils import formatScriptsAndArgs + from salomeContextUtils import formatScriptsAndArgs command = formatScriptsAndArgs(toimport) if command: proc = subprocess.Popen(command, shell=True) @@ -784,9 +714,9 @@ def useSalome(args, modules_list, modules_root_dir): return clt def execScript(script_path): - print 'executing', script_path - sys.path.insert(0, os.path.dirname(script_path)) - execfile(script_path,globals()) + print('executing', script_path) + sys.path.insert(0, os.path.realpath(os.path.dirname(script_path))) + exec(compile(open(script_path).read(), script_path, 'exec'),globals()) del sys.path[0] # ----------------------------------------------------------------------------- @@ -796,12 +726,10 @@ def registerEnv(args, modules_list, modules_root_dir): Register args, modules_list, modules_root_dir in a file for further use, when SALOME is launched embedded in an other application. """ - if sys.platform == "win32": - fileEnv = os.getenv('TEMP') - else: - fileEnv = '/tmp/' - - fileEnv += os.getenv('USER') + "_" + str(args['port']) \ + from salome_utils import getTmpDir + fileEnv = getTmpDir() + from salome_utils import getUserName + fileEnv += getUserName() + "_" + str(args['port']) \ + '_' + args['appname'].upper() + '_env' fenv=open(fileEnv,'w') pickle.dump((args, modules_list, modules_root_dir),fenv) @@ -824,24 +752,24 @@ def no_main(): # ----------------------------------------------------------------------------- -def main(): +def main(exeName=None): """Salome launch as a main application""" # define folder to store omniorb config (initially in virtual application folder) try: - from salomeLauncherUtils import setOmniOrbUserPath + from salomeContextUtils import setOmniOrbUserPath setOmniOrbUserPath() - except Exception, e: - print e + except Exception as e: + print(e) sys.exit(1) from salome_utils import getHostName - print "runSalome running on %s" % getHostName() - args, modules_list, modules_root_dir = setenv.get_config() + args, modules_list, modules_root_dir = setenv.get_config(exeName=exeName) + print("runSalome running on %s" % getHostName()) kill_salome(args) save_config = True - if args.has_key('save_config'): + if 'save_config' in args: save_config = args['save_config'] # -- test = True @@ -922,13 +850,12 @@ def foreGround(clt, args): # def runSalome(): - import user clt,args = main() # -- test = args['gui'] and args['session_gui'] test = test or args['wake_up_session'] # -- - # The next test covers the --pinter option or var PYTHONINSPECT setted + # The next test covers the --pinter option or if var PYTHONINSPECT is set # -- test = test and not os.environ.get('PYTHONINSPECT') # -- @@ -947,7 +874,6 @@ def runSalome(): if test: foreGround(clt, args) pass - # -- pass #