X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=bin%2FrunSalome.py;h=172298f984413af787eb7b8aa69b5abac9e276ef;hb=561c8837aca34ed658cc6fbe04cf2f8778d824c4;hp=3bbf51e3ce8bb471b0ea08e023af6ce35bc620f8;hpb=df2f3847c7cecf6d51055cb5872105121a15bcb2;p=modules%2Fkernel.git diff --git a/bin/runSalome.py b/bin/runSalome.py index 3bbf51e3c..172298f98 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-2016 CEA/DEN, EDF R&D, OPEN CASCADE +# Copyright (C) 2007-2020 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 @@ -34,6 +34,7 @@ from server import process_id, Server import json import subprocess from salomeContextUtils import ScriptAndArgsObjectEncoder +import platform # ----------------------------------------------------------------------------- @@ -41,7 +42,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 """ @@ -56,7 +57,7 @@ def killLocalPort(): 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 """ @@ -144,11 +145,19 @@ class CatalogServer(Server): def __init__(self,args): self.args=args self.initArgs() - self.SCMD1=['SALOME_ModuleCatalog_Server','-common'] + self.SCMD1=['SALOME_ModuleCatalog_Server'] + if 'launcher' in self.args: + pos = args['launcher'].find(":") + if pos != -1: + self.SCMD1+=['-ORBInitRef'] + machine = args['launcher'][0:pos] + port = args['launcher'][pos+1:] + self.SCMD1+=["NameService=corbaname::" + machine + ":" + port] + self.SCMD1+=['-common'] self.SCMD2=[] - home_dir=os.getenv('HOME') + home_dir=os.path.expanduser("~") if home_dir is not None: - self.SCMD2=['-personal',os.path.join(home_dir,'Salome/resources/CatalogModulePersonnel.xml')] + self.SCMD2=['-personal',os.path.join(home_dir,'Salome', 'resources', 'CatalogModulePersonnel.xml')] def setpath(self,modules_list,modules_root_dir): list_modules = modules_list[:] @@ -169,6 +178,13 @@ class SalomeDSServer(Server): self.args=args self.initArgs() self.CMD=['SALOMEDS_Server'] + if 'launcher' in self.args: + pos = args['launcher'].find(":") + if pos != -1: + self.CMD+=['-ORBInitRef'] + machine = args['launcher'][0:pos] + port = args['launcher'][pos+1:] + self.CMD+=["NameService=corbaname::" + machine + ":" + port] # --- @@ -177,6 +193,14 @@ class ConnectionManagerServer(Server): self.args=args self.initArgs() self.CMD=['SALOME_ConnectionManagerServer'] + if 'launcher' in self.args: + pos = args['launcher'].find(":") + if pos != -1: + self.CMD+=['-ORBInitRef'] + machine = args['launcher'][0:pos] + port = args['launcher'][pos+1:] + self.CMD+=["NameService=corbaname::" + machine + ":" + port] + # --- @@ -185,14 +209,37 @@ class RegistryServer(Server): self.args=args self.initArgs() self.CMD=['SALOME_Registry_Server', '--salome_session','theSession'] + if 'launcher' in self.args: + pos = args['launcher'].find(":") + if pos != -1: + self.CMD+=['-ORBInitRef'] + machine = args['launcher'][0:pos] + port = args['launcher'][pos+1:] + self.CMD+=["NameService=corbaname::" + machine + ":" + port] # --- class ContainerCPPServer(Server): - def __init__(self,args): + def __init__(self,args,with_gui=False): self.args=args self.initArgs() - self.CMD=['SALOME_Container','FactoryServer'] + self.CMD=['SALOME_Container'] + if 'launcher' in self.args: + pos = args['launcher'].find(":") + if pos != -1: + self.CMD+=['-ORBInitRef'] + machine = args['launcher'][0:pos] + port = args['launcher'][pos+1:] + self.CMD+=["NameService=corbaname::" + machine + ":" + port] + self.CMD+=['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 # --- @@ -225,15 +272,27 @@ class SessionServer(Server): # self.initArgs() self.SCMD1=['SALOME_Session_Server'] + if "SQUISH_PREFIX" in os.environ: + if platform.system() == "Windows" : + self.SCMD1 = [os.path.join(os.getenv("SQUISH_PREFIX"), "bin", "dllpreload.exe"),os.path.join(os.getenv("SQUISH_SALOME_PATH"), "W64", "GUI", "bin", "salome", self.SCMD1[0])] + else : + os.environ["LD_LIBRARY_PATH"] = os.environ["SQUISH_PREFIX"] + "/lib:" + os.environ["LD_LIBRARY_PATH"] self.SCMD2=[] + if 'launcher' in self.args: + pos = args['launcher'].find(":") + if pos != -1: + self.SCMD1+=['-ORBInitRef'] + machine = args['launcher'][0:pos] + port = args['launcher'][pos+1:] + self.SCMD1+=["NameService=corbaname::" + machine + ":" + port] if 'registry' in self.args['embedded']: self.SCMD1+=['--with','Registry', '(','--salome_session','theSession',')'] if 'moduleCatalog' in self.args['embedded']: self.SCMD1+=['--with','ModuleCatalog','(','-common'] - home_dir=os.getenv('HOME') + home_dir=os.path.expanduser("~") if home_dir is not None: - self.SCMD2+=['-personal',os.path.join(home_dir,'Salome/resources/CatalogModulePersonnel.xml')] + self.SCMD2+=['-personal',os.path.join(home_dir,'Salome','resources','CatalogModulePersonnel.xml')] self.SCMD2+=[')'] if 'study' in self.args['embedded']: self.SCMD2+=['--with','SALOMEDS','(',')'] @@ -247,13 +306,12 @@ class SessionServer(Server): if 'pyContainer' in self.args['standalone'] or 'pyContainer' in self.args['embedded']: raise Exception('Python containers no longer supported') if self.args['gui']: - session_gui = True - if 'session_gui' in self.args: - session_gui = self.args['session_gui'] - if session_gui: - self.SCMD2+=['GUI'] - if self.args['splash']: - self.SCMD2+=['SPLASH'] + session_gui = self.args.get('session_gui', True) + if not session_gui: + self.SCMD2+=['--hide-desktop'] + else: + if not self.args['splash']: + self.SCMD2+=['--hide-splash'] pass if self.args['study_hdf'] is not None: self.SCMD2+=['--study-hdf=%s'%self.args['study_hdf']] @@ -266,7 +324,7 @@ class SessionServer(Server): pass pass if self.args['noexcepthandler']: - self.SCMD2+=['noexcepthandler'] + self.SCMD2+=['--no-exception-handler'] if 'user_config' in self.args: self.SCMD2+=['--resources=%s'%self.args['user_config']] if 'modules' in self.args: @@ -346,8 +404,10 @@ class LauncherServer(Server): '(','--salome_session','theSession',')'] if 'moduleCatalog' in self.args['embedded']: self.SCMD1+=['--with','ModuleCatalog','(','-common'] - self.SCMD2+=['-personal', - '${HOME}/Salome/resources/CatalogModulePersonnel.xml',')'] + home_dir=os.path.expanduser("~") + if home_dir is not None: + self.SCMD2=['-personal',os.path.join(home_dir,'Salome','resources','CatalogModulePersonnel.xml')] + self.SCMD2+=[')'] if 'study' in self.args['embedded']: self.SCMD2+=['--with','SALOMEDS','(',')'] if 'cppContainer' in self.args['embedded']: @@ -420,6 +480,7 @@ def startSalome(args, modules_list, modules_root_dir): # clt=orbmodule.client(args) + addToPidict(args) # # Wake up session option @@ -459,14 +520,16 @@ def startSalome(args, modules_list, modules_root_dir): myServer=LoggerServer(args) myServer.run() clt.waitLogger("Logger") + addToPidict(args) # Launch Session Server (to show splash ASAP) # - if args["gui"]: + if args["gui"] and not args['launcher_only']: mySessionServ = SessionServer(args,args['modules'],modules_root_dir) mySessionServ.setpath(modules_list,modules_root_dir) mySessionServ.run() + addToPidict(args) # # Launch Registry Server, @@ -480,6 +543,7 @@ def startSalome(args, modules_list, modules_root_dir): clt.waitNS("/Registry") else: clt.waitNSPID("/Registry",myServer.PID) + addToPidict(args) # # Launch Catalog Server, @@ -495,6 +559,7 @@ def startSalome(args, modules_list, modules_root_dir): clt.waitNS("/Kernel/ModulCatalog",SALOME_ModuleCatalog.ModuleCatalog) else: clt.waitNSPID("/Kernel/ModulCatalog",cataServer.PID,SALOME_ModuleCatalog.ModuleCatalog) + addToPidict(args) # # Launch SalomeDS Server, @@ -507,25 +572,28 @@ def startSalome(args, modules_list, modules_root_dir): 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) + addToPidict(args) # # Launch LauncherServer # - myCmServer = LauncherServer(args) - myCmServer.setpath(modules_list,modules_root_dir) - myCmServer.run() + if not 'launcher' in args: + myCmServer = LauncherServer(args) + myCmServer.setpath(modules_list,modules_root_dir) + myCmServer.run() + addToPidict(args) # # Launch ConnectionManagerServer # - myConnectionServer = ConnectionManagerServer(args) - myConnectionServer.run() - + if not args['launcher_only']: + myConnectionServer = ConnectionManagerServer(args) + myConnectionServer.run() from Utils_Identity import getShortHostName @@ -543,12 +611,13 @@ 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") else: clt.waitNSPID("/Containers/" + theComputer + "/FactoryServer",myServer.PID) + addToPidict(args) if 'pyContainer' in args['standalone']: raise Exception('Python containers no longer supported') @@ -557,7 +626,7 @@ def startSalome(args, modules_list, modules_root_dir): # Wait until Session Server is registered in naming service # - if args["gui"]: + if args["gui"] and not args['launcher_only']: ##---------------- import Engines import SALOME @@ -579,7 +648,7 @@ def startSalome(args, modules_list, modules_root_dir): # session.GetInterface() # - # additionnal external python interpreters + # additional external python interpreters # nbaddi=0 @@ -692,11 +761,11 @@ def useSalome(args, modules_list, modules_root_dir): toopen = args['study_hdf'] if toopen: import salome - salome.salome_init(toopen) + salome.salome_init(path=toopen) if 'pyscript' in args: toimport = args['pyscript'] from salomeContextUtils import formatScriptsAndArgs - command = formatScriptsAndArgs(toimport) + command = formatScriptsAndArgs(toimport, escapeSpaces=True) if command: proc = subprocess.Popen(command, shell=True) addToKillList(proc.pid, command, args['port']) @@ -744,6 +813,14 @@ def no_main(): # ----------------------------------------------------------------------------- +def addToPidict(args): + global process_id + from addToKillList import addToKillList + for pid, cmd in list(process_id.items()): + addToKillList(pid, cmd, args['port']) + +# ----------------------------------------------------------------------------- + def main(exeName=None): """Salome launch as a main application""" @@ -756,7 +833,8 @@ def main(exeName=None): sys.exit(1) from salome_utils import getHostName - args, modules_list, modules_root_dir = setenv.get_config(exeName=exeName) + keep_env = not os.getenv('SALOME_PLEASE_SETUP_ENVIRONMENT_AS_BEFORE') + args, modules_list, modules_root_dir = setenv.get_config(exeName=exeName, keepEnvironment=keep_env) print("runSalome running on %s" % getHostName()) kill_salome(args) @@ -768,13 +846,13 @@ def main(exeName=None): if args['wake_up_session']: test = False pass - if test: + if test and not 'launcher' in args: from searchFreePort import searchFreePort searchFreePort(args, save_config, args.get('useport')) pass # -- #setenv.main() - setenv.set_env(args, modules_list, modules_root_dir) + setenv.set_env(args, modules_list, modules_root_dir, keepEnvironment=keep_env) clt = useSalome(args, modules_list, modules_root_dir) return clt,args @@ -793,10 +871,12 @@ def foreGround(clt, args): dt = 0.1 nbtot = 100 nb = 0 + session_pid = None while 1: try: status = session.GetStatSession() gui_detected = status.activeGUI + session_pid = session.getPID() except: pass if gui_detected: @@ -816,9 +896,9 @@ def foreGround(clt, args): # -- server = Server({}) if sys.platform == "win32": - server.CMD = [os.getenv("PYTHONBIN"), "-m", "killSalomeWithPort", "--spy", "%s"%(os.getpid()), "%s"%(port)] + server.CMD = [os.getenv("PYTHONBIN"), "-m", "killSalomeWithPort", "--spy", "%s"%(session_pid or os.getpid()), "%s"%(port)] else: - server.CMD = ["killSalomeWithPort.py", "--spy", "%s"%(os.getpid()), "%s"%(port)] + server.CMD = ["killSalomeWithPort.py", "--spy", "%s"%(session_pid or os.getpid()), "%s"%(port)] server.run() # os.system("killSalomeWithPort.py --spy %s %s &"%(os.getpid(), port)) # -- @@ -847,7 +927,7 @@ def runSalome(): 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') # -- @@ -860,7 +940,7 @@ def runSalome(): except: pass # -- - test = test and os.getenv("SALOME_TEST_MODE", "0") != "1" +# test = test and os.getenv("SALOME_TEST_MODE", "0") != "1" test = test and args['foreground'] # -- if test: