Salome HOME
bos #16706 Improve procedure that kills booked TCP port
[modules/kernel.git] / bin / runSalome.py
index 4ef93e418bb2bcffa1d13b0c18d0915aa4718d56..172298f984413af787eb7b8aa69b5abac9e276ef 100755 (executable)
@@ -1,6 +1,6 @@
 #!/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
@@ -34,6 +34,7 @@ from server import process_id, Server
 import json
 import subprocess
 from salomeContextUtils import ScriptAndArgsObjectEncoder
+import platform
 
 # -----------------------------------------------------------------------------
 
@@ -154,9 +155,9 @@ class CatalogServer(Server):
               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[:]
@@ -271,6 +272,11 @@ 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(":")
@@ -284,9 +290,9 @@ class SessionServer(Server):
                          '(','--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','(',')']
@@ -398,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']:
@@ -472,6 +480,7 @@ def startSalome(args, modules_list, modules_root_dir):
     #
 
     clt=orbmodule.client(args)
+    addToPidict(args)
 
     #
     # Wake up session option
@@ -511,6 +520,7 @@ 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)
     #
@@ -519,6 +529,7 @@ def startSalome(args, modules_list, modules_root_dir):
         mySessionServ = SessionServer(args,args['modules'],modules_root_dir)
         mySessionServ.setpath(modules_list,modules_root_dir)
         mySessionServ.run()
+        addToPidict(args)
 
     #
     # Launch Registry Server,
@@ -532,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,
@@ -547,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,
@@ -562,6 +575,7 @@ def startSalome(args, modules_list, modules_root_dir):
           clt.waitNS("/Study")
         else:
           clt.waitNSPID("/Study",myServer.PID)
+        addToPidict(args)
 
     #
     # Launch LauncherServer
@@ -571,6 +585,7 @@ def startSalome(args, modules_list, modules_root_dir):
       myCmServer = LauncherServer(args)
       myCmServer.setpath(modules_list,modules_root_dir)
       myCmServer.run()
+      addToPidict(args)
 
     #
     # Launch ConnectionManagerServer
@@ -602,6 +617,7 @@ def startSalome(args, modules_list, modules_root_dir):
           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')
@@ -749,7 +765,7 @@ def useSalome(args, modules_list, modules_root_dir):
                 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'])
@@ -797,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"""
 
@@ -847,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:
@@ -870,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))
     # --
@@ -914,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: