Salome HOME
Use isinstance() instead of type() and remove useless list(....keys())
[modules/kernel.git] / bin / salomeContext.py
index e23aef7d6941f9d0f8d76f748c23c1c38c8261ba..0d12eca5665f3d80ed6759413cdb148bf7847f17 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2013-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2013-2017  CEA/DEN, EDF R&D, OPEN CASCADE
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -91,7 +91,7 @@ class SalomeContext:
     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":
@@ -224,7 +224,7 @@ class SalomeContext:
       'car'     : '_getCar',
       }
 
-    if not command in list(availableCommands.keys()):
+    if command not in availableCommands:
       command = "start"
       options = args
 
@@ -256,25 +256,25 @@ class SalomeContext:
     if command is None:
       if args and args[0] in ["-h","--help","help"]:
         usage()
-        sys.exit(0)
+        return 0
       # try to default to "start" command
       command = "_runAppli"
 
     try:
       res = getattr(self, command)(options) # run appropriate method
-      return res or (None, None)
+      return res or 0
     except SystemExit as returncode:
       if returncode != 0:
-        self.getLogger().warning("SystemExit %s in method %s.", returncode, command)
-      sys.exit(returncode)
+        self.getLogger().error("SystemExit %s in method %s.", returncode, command)
+      return returncode
     except Exception:
       self.getLogger().error("Unexpected error:")
       import traceback
       traceback.print_exc()
-      sys.exit(1)
+      return 1
     except SalomeContextException as e:
       self.getLogger().error(e)
-      sys.exit(1)
+      return 1
   #
 
   def __setContextFromConfigFile(self, filename, reserved=None):
@@ -285,7 +285,7 @@ class SalomeContext:
     except SalomeContextException as e:
       msg = "%s"%e
       self.getLogger().error(msg)
-      sys.exit(1)
+      return 1
 
     # unset variables
     for var in unsetVars:
@@ -321,6 +321,7 @@ class SalomeContext:
 
     import runSalome
     runSalome.runSalome()
+    return 0
   #
 
   def _setContext(self, args=None):
@@ -330,7 +331,7 @@ class SalomeContext:
       print("*** SALOME context has already been set.")
       print("*** Enter 'exit' (only once!) to leave SALOME context.")
       print("***")
-      return
+      return 0
 
     os.environ["SALOME_CONTEXT_SET"] = "yes"
     print("***")
@@ -340,7 +341,8 @@ class SalomeContext:
 
     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):
@@ -375,7 +377,7 @@ class SalomeContext:
     ports = args
     if not ports:
       print("Port number(s) not provided to command: salome kill <port(s)>")
-      return
+      return 1
 
     from multiprocessing import Process
     from killSalomeWithPort import killMyPort
@@ -385,7 +387,7 @@ class SalomeContext:
         p = Process(target = killMyPort, args=(port,))
         p.start()
         p.join()
-    pass
+    return 0
   #
 
   def _killAll(self, unused=None):
@@ -393,7 +395,7 @@ class SalomeContext:
       import PortManager # mandatory
       from multiprocessing import Process
       from killSalomeWithPort import killMyPort
-      ports = PortManager.getBusyPorts()
+      ports = PortManager.getBusyPorts()['this']
 
       if ports:
         import tempfile
@@ -407,6 +409,7 @@ class SalomeContext:
       from killSalome import killAllPorts
       killAllPorts()
       pass
+    return 0
   #
 
   def _runTests(self, args=None):
@@ -468,14 +471,25 @@ Available options are:
 
     if "-h" in args or "--help" in args:
       print(usage + epilog)
-      return
+      return 0
 
     if "-p" in args or "--ports" in args:
       import PortManager
       ports = PortManager.getBusyPorts()
-      print("SALOME instances are running on ports:", ports)
-      if ports:
-        print("Last started instance on port %s"%ports[-1])
+      this_ports = ports['this']
+      other_ports = ports['other']
+      if this_ports or other_ports:
+          print("SALOME instances are running on the following ports:")
+          if this_ports:
+              print("   This application:", this_ports)
+          else:
+              print("   No SALOME instances of this application")
+          if other_ports:
+              print("   Other applications:", other_ports)
+          else:
+              print("   No SALOME instances of other applications")
+      else:
+          print("No SALOME instances are running")
 
     if "-s" in args or "--softwares" in args:
       if "-s" in args:
@@ -489,7 +503,9 @@ Available options are:
 
     if "-v" in args or "--version" in args:
       print("Running with python", platform.python_version())
-      self._runAppli(["--version"])
+      return self._runAppli(["--version"])
+
+    return 0
   #
 
   def _showDoc(self, args=None):
@@ -499,7 +515,7 @@ Available options are:
     modules = args
     if not modules:
       print("Module(s) not provided to command: salome doc <module(s)>")
-      return
+      return 1
 
     appliPath = os.getenv("ABSOLUTE_APPLI_PATH")
     if not appliPath:
@@ -546,7 +562,6 @@ Available options are:
     print("")
     print("                    SALOME is working for you; what else?")
     print("")
-    sys.exit(0)
   #
 
   def _getCar(self, unused=None):
@@ -580,7 +595,6 @@ Available options are:
     print("")
     print("                                Drive your simulation properly with SALOME!")
     print("")
-    sys.exit(0)
   #
 
   # Add the following two methods since logger is not pickable
@@ -606,17 +620,11 @@ Available options are:
 
 if __name__ == "__main__":
   if len(sys.argv) == 3:
-    context = sys.argv[1]
-    args = sys.argv[2]
-
-    context = pickle.loads(context.encode())
-    args = pickle.loads(args.encode())
+    context = pickle.loads(sys.argv[1].encode())
+    args = pickle.loads(sys.argv[2].encode())
 
-    (out, err) = context._startSalome(args)
-    if out:
-      sys.stdout.write(out)
-    if err:
-      sys.stderr.write(err)
+    status = context._startSalome(args)
+    sys.exit(status)
   else:
     usage()
 #