Salome HOME
Update for slurm 21.
[modules/kernel.git] / bin / runConsole.py
old mode 100644 (file)
new mode 100755 (executable)
index bb2192c..c547349
@@ -1,5 +1,6 @@
+#! /usr/bin/env python3
 #  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2007-2023  CEA, EDF, OPEN CASCADE
 #
 # Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 # CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -24,7 +25,6 @@
 from optparse import OptionParser
 import os
 import sys
-import user
 import pickle
 
 # Use to display newlines (\n) in epilog
@@ -47,7 +47,7 @@ ask user to select a port from list of available SALOME instances.\n
 The -c option can be used to specify the command to execute in the interpreter.
 A script can also be used.
 For example:
-       salome connect -p 2810 -c 'print "Hello"'
+       salome connect -p 2810 -c 'print("Hello")'
        salome connect -p 2810 hello.py
 """
   parser = MyParser(usage=usage, epilog=epilog)
@@ -60,31 +60,31 @@ For example:
                     )
   try:
     (options, args) = parser.parse_args(args)
-  except Exception, e:
-    print e
-    return
+  except Exception as e:
+    print(e)
+    return {}, []
 
   return options, args
 #
 
 def __show_running_instances(list_of_instances):
-  print '-'*10
-  print "Running instances:"
+  print('-'*10)
+  print("Running instances:")
   for i in range(len(list_of_instances)):
     host, port, _ = list_of_instances[i]
-    print "   [%d] %s:%s"%(i+1, host, port)
-  print '-'*10
+    print("   [%d] %s:%s"%(i+1, host, port))
+  print('-'*10)
 #
 
 def __choose_in(choices):
   __show_running_instances(choices)
-  rep = raw_input("Please enter the number of instance to use (0 to cancel): ")
+  rep = input("Please enter the number of instance to use (0 to cancel): ")
   if rep == '0':
     return None, None, None
   elif rep in [str(i) for i in range(1, len(choices)+1)]:
     return choices[int(rep)-1]
   else:
-    print "*** Invalid number! ***"
+    print("*** Invalid number! ***")
     return __choose_in(choices)
 #
 
@@ -102,31 +102,31 @@ def __get_running_session(requested_port=None, lastInstanceByDefault=False):
 
   host, port, filename = None, None, None
   if requested_port:
-    print "Search for running instance on port %s..."%requested_port
+    print("Search for running instance on port %s..."%requested_port)
     found = [(h,p,f) for h,p,f in available_connexions if int(p) == int(requested_port)]
     if not found:
-      print "   ...no running instance found"
+      print("   ...no running instance found")
     elif len(found) == 1:
       host, port, filename = found[0]
-      print "   ...found unique instance: %s:%s"%(host,port)
+      print("   ...found unique instance: %s:%s"%(host,port))
     else:
-      print "   ...multiple instances found ; please choose one in the following:"
+      print("   ...multiple instances found ; please choose one in the following:")
       host, port, filename = __choose_in(found)
   else: # no requested port
     if not available_connexions:
-      print "No running instance found"
+      print("No running instance found")
     elif len(available_connexions) == 1:
       host, port, filename = available_connexions[0]
-      print "Found unique instance: %s:%s"%(host,port)
+      print("Found unique instance: %s:%s"%(host,port))
     else:
-      print "Multiple instances found ; please choose one in the following:"
+      print("Multiple instances found ; please choose one in the following:")
       host, port, filename = __choose_in(available_connexions)
       pass
 
   if port:
-    print "Selected instance: %s:%s"%(host, port)
+    print("Selected instance: %s:%s"%(host, port))
   else:
-    print "Cancel."
+    print("Cancel.")
 
   return host, port, filename
 #
@@ -143,7 +143,7 @@ class client(orbmodule.client):
       self.rootContext = obj._narrow(CosNaming.NamingContext)
       return
     except (CORBA.TRANSIENT,CORBA.OBJECT_NOT_EXIST,CORBA.COMM_FAILURE):
-      print "It's not a valid naming service"
+      print("It's not a valid naming service")
       self.rootContext = None
       sys.stdout.flush()
       raise
@@ -162,12 +162,12 @@ def start_client():
   if session_server:
     session = clt.waitNS("/Kernel/Session")
   catalog = clt.waitNS("/Kernel/ModulCatalog")
-  studyMgr = clt.waitNS("/myStudyManager")
+  study = clt.waitNS("/Study")
 
   import salome
   salome.salome_init()
   from salome import lcc
-  print "--> now connected to SALOME"
+  print("--> now connected to SALOME")
 #
 
 def _prompt(environment=None, commands=None, message="Connecting to SALOME"):
@@ -183,10 +183,10 @@ def _prompt(environment=None, commands=None, message="Connecting to SALOME"):
   readline.set_completer(rlcompleter.Completer(environment).complete)
   readline.parse_and_bind("tab: complete")
   # calling this with globals ensures we can see the environment
-  print message
+  print(message)
   shell = code.InteractiveConsole(environment)
   for cmd in commands:
-    print "Execute command:", cmd
+    print("Execute command:", cmd)
     shell.push(cmd)
     pass
   shell.interact()
@@ -198,7 +198,7 @@ def connect(args=None, env=None):
   options, args = __parse_args(args)
   host, port, filename = __get_running_session(options.port)
   if not port:
-    sys.exit(0)
+    return 1
 
   cmd = [
     "os.environ['OMNIORB_CONFIG'] = '%s'"%filename,
@@ -208,21 +208,27 @@ def connect(args=None, env=None):
     cmd.append(options.command)
   if args: # unprocessed: may be scripts
     for arg in args:
-      cmd.append("execfile('%s')"%os.path.abspath(os.path.expanduser(arg)))
+      filename = os.path.abspath(os.path.expanduser(arg))
+      pythonLine = "exec(compile(open(%s, \"rb\").read(), %s, 'exec'))"%(filename, filename)
+      cmd.append(pythonLine)
 
   if port:
     import subprocess
     absoluteAppliPath = os.getenv('ABSOLUTE_APPLI_PATH','')
     env_copy = os.environ.copy()
-    proc = subprocess.Popen(['python', os.path.join(absoluteAppliPath,"bin","salome","runConsole.py"), pickle.dumps(cmd)], shell=False, close_fds=True, env=env_copy)
-    return proc.communicate()
+    cmdDump = pickle.dumps(cmd, protocol=0)
+    cmdString = cmdDump.decode()
+    proc = subprocess.Popen(['python3', os.path.join(absoluteAppliPath,"bin","salome","runConsole.py"), cmdString], shell=False, close_fds=True, env=env_copy)
+    proc.communicate()
+    return proc.returncode
 #
 
 if __name__ == "__main__":
   if len(sys.argv) == 2:
-    cmd = pickle.loads(sys.argv[1])
+    cmdBytes = sys.argv[1].encode()  
+    cmd = pickle.loads(cmdBytes)
     sys.argv = []
     _prompt(commands=cmd)
   else:
-    print "runConsole.py: incorrect usage!"
+    print("runConsole.py: incorrect usage!")
 #