#!/usr/bin/env python3
# -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2019 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
import json
import subprocess
from salomeContextUtils import ScriptAndArgsObjectEncoder
+import platform
# -----------------------------------------------------------------------------
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[:]
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]
# ---
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]
+
# ---
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]
# ---
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")
#
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','(',')']
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']]
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:
'(','--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']:
#
clt=orbmodule.client(args)
+ addToPidict(args)
#
# Wake up session option
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,
clt.waitNS("/Registry")
else:
clt.waitNSPID("/Registry",myServer.PID)
+ addToPidict(args)
#
# Launch Catalog Server,
clt.waitNS("/Kernel/ModulCatalog",SALOME_ModuleCatalog.ModuleCatalog)
else:
clt.waitNSPID("/Kernel/ModulCatalog",cataServer.PID,SALOME_ModuleCatalog.ModuleCatalog)
+ addToPidict(args)
#
# Launch SalomeDS Server,
clt.waitNS("/Study")
else:
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
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')
# Wait until Session Server is registered in naming service
#
- if args["gui"]:
+ if args["gui"] and not args['launcher_only']:
##----------------
import Engines
import SALOME
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'])
# -----------------------------------------------------------------------------
+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"""
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)
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
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:
# --
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))
# --
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: