# These files are executable scripts
SET(SCRIPTS
- salome.py
+ start_salome.py
)
SALOME_INSTALL_SCRIPTS("${SCRIPTS}" ${SALOME_INSTALL_SCRIPT_PYTHON})
+++ /dev/null
-#!/usr/bin/env python3
-# lightweight salome launcher
-import subprocess
-import os
-import glob
-import json
-#
-import orbmodule
-from searchFreePort import searchFreePort
-import SALOME
-import SALOME_ModuleCatalog
-#
-# define supported options
-# [PYTHON_FILE [args] [PYTHON_FILE [args]...]]
-usage = """Usage: salome.py [options] [python_file [args]] [python_file [args]] ...
- Python file arguments, if any, must be comma-separated and prefixed by args
- (without blank characters and quotes), e.g. myscript.py args:arg1,arg2=val
-
- Starts salome and optionnally executes python scripts provided as trailing arguments"""
-from optparse import OptionParser
-parser = OptionParser(usage=usage)
-parser.add_option("-g", "--gui", action="store_true", dest="gui", default=False,
- help="Launch salome servers and start gui")
-parser.add_option("-t", "--tui", action="store_true", dest="tui", default=False,
- help="Launch salome servers")
-parser.add_option("-e", "--environ", action="store_true", dest="env", default=False,
- help="return a bash shell with Salome environement set")
-
-# main programm
-def main():
- (options, args) = parser.parse_args()
- if not (options.gui or options.tui or options.env):
- # all options are set to false! activate gui option
- options.gui=True
-
- options.extra_args=None
- if args: # parse optionnal python scripts args
- options.extra_args=parse_extra_args(args)
-
- if options.env:
- # return
- return bash_shell()
-
- if options.tui or options.gui:
- clt=start_salome(options)
- #if clt != None:
- # print(" --- registered objects tree in Naming Service ---")
- # clt.showNS()
-
-def parse_extra_args(args):
- # these extra args represent python script files with optionnally their arguments
- extra_args=[] # build a list of dicts (the form required by salome session server)
- while args:
- # pull first arg, check it is a file
- pyfilename=args[0]
- pyargs=[]
- args=args[1:]
- if not os.path.isfile(pyfilename):
- continue # if the arg is not a file name we skip it
- if args and args[0].startswith("args:"):
- #if the next arg is related to pyscript, pull it and process it
- pyargs=args[0][5:].split(",")
- args=args[1:]
- extra_args.append({pyfilename:pyargs})
- return extra_args
-
-def bash_shell():
- cmd = ["/bin/bash"]
- proc = subprocess.Popen(cmd, shell=False, close_fds=True)
- proc.communicate()
- return proc.returncode
-
-def start_salome(options):
- clt=start_orb()
-
- # Launch Registry Server, and wait for it available in Naming Service
- RegistryServer().run()
- clt.waitNS("/Registry")
-
- # Launch Module Catalog Server, and wait for it available in Naming Service
- CatalogServer().run()
- clt.waitNS("/Kernel/ModulCatalog",SALOME_ModuleCatalog.ModuleCatalog)
-
- # launch SalomeDS server, wait for it available in Naming Service
- SalomeDSServer().run()
- clt.waitNS("/Study")
-
- # launch
- ConnectionManagerServer().run()
-
- # launch Session Server
- if options.gui:
- # process our list of extra args into a string redeable by session server (json style)
- pyscriptargs=""
- if options.extra_args: # pyscripts were specified, we transfer the info to gui
- pyscriptargs='--pyscript=%s' % json.dumps(options.extra_args)
- SessionServer().run(pyscriptargs)
-
- # start launcher server
- LauncherServer().run()
- # clt.waitNS("/LauncherServer")
-
- if not options.gui:
- # in tui mode, start FactoryServer standalone
- # ContainerServer().run() CNC KO?
- # run specified pyscripts, if any
- if options.extra_args:
- for file_args_dict in options.extra_args:
- for f in file_args_dict.keys():
- command="python3 "+f
- for arg in file_args_dict[f]:
- command += " "+arg
- print ("command to execute pyscript: ", command)
- proc = subprocess.Popen(command, shell=True)
- # addToKillList(proc.pid, command, args['port']) ??
- res = proc.wait()
- if res: sys.exit(1) # if there's an error when executing script, we should explicitly exit
-
- if options.gui:
- session=clt.waitNS("/Kernel/Session",SALOME.Session)
- return clt
-
-def start_orb():
- # initialise orb and naming service
- searchFreePort()
- print("Initialise ORB and Naming Service")
- clt=orbmodule.client()
- return clt
-
-def generate_module_catalog():
- salome_modules=os.getenv("SALOME_MODULES")
- assert salome_modules != None, "SALOME_MODULES variable not found!"
- cata_path=[]
- for module in salome_modules.split(","):
- module_root_dir = os.getenv(module + "_ROOT_DIR")
- module_cata = module + "Catalog.xml"
- cata_path.extend(glob.glob(os.path.join(module_root_dir,"share","salome",
- "resources",module.lower(), module_cata)))
- return ':'.join(cata_path)
-
-# base class to start corba servers
-class Server:
- CMD=[]
- def run(self):
- args = self.CMD
- pid = os.spawnvp(os.P_NOWAIT, args[0], args)
- print ("start server ", args, " (pid = %s)" % pid)
-
-class LauncherServer(Server):
- CMD=['SALOME_LauncherServer']
-
-class ConnectionManagerServer(Server):
- CMD=['SALOME_ConnectionManagerServer']
-
-class SalomeDSServer(Server):
- CMD=['SALOMEDS_Server']
-
-class RegistryServer(Server):
- CMD=['SALOME_Registry_Server', '--salome_session','theSession']
-
-class ContainerServer(Server):
- CMD=['SALOME_Container','FactoryServer','-ORBInitRef','NameService=corbaname::localhost']
-
-class LoggerServer(Server):
- CMD=['SALOME_Logger_Server', 'logger.log']
-
-class CatalogServer(Server):
- CMD=['SALOME_ModuleCatalog_Server','-common']
- def run(self):
- self.CMD = self.CMD + [generate_module_catalog()]
- Server.run(self)
-
-class NotifyServer(Server):
- CMD=['notifd','-c','${KERNEL_ROOT_DIR}/share/salome/resources/channel.cfg -DFactoryIORFileName=/tmp/${LOGNAME}_rdifact.ior -DChannelIORFileName=/tmp/${LOGNAME}_rdichan.ior']
-
-class SessionServer(Server):
- CMD=['SALOME_Session_Server','--with','Container','(','FactoryServer',')','--with', 'SalomeAppEngine', '(', ')', 'CPP', 'GUI', 'SPLASH', '--language=fr']
- def run(self, pyscriptopt):
- if pyscriptopt: # communicate to gui the scripts to run
- self.CMD = self.CMD + [pyscriptopt]
- salome_modules=os.getenv("SALOME_MODULES")
- assert salome_modules != None, "SALOME_MODULES variable not found!"
- self.CMD = self.CMD + ['--modules (' + salome_modules.replace(",",":") + ')' ]
- Server.run(self)
-
-if __name__ == "__main__":
- main()
--- /dev/null
+#!/usr/bin/env python3
+# lightweight salome launcher
+import subprocess
+import os
+import glob
+import json
+#
+import orbmodule
+from searchFreePort import searchFreePort
+import SALOME
+import SALOME_ModuleCatalog
+#
+# define supported options
+# [PYTHON_FILE [args] [PYTHON_FILE [args]...]]
+usage = """Usage: salome.py [options] [python_file [args]] [python_file [args]] ...
+ Python file arguments, if any, must be comma-separated and prefixed by args
+ (without blank characters and quotes), e.g. myscript.py args:arg1,arg2=val
+
+ Starts salome and optionnally executes python scripts provided as trailing arguments"""
+from optparse import OptionParser
+parser = OptionParser(usage=usage)
+parser.add_option("-g", "--gui", action="store_true", dest="gui", default=False,
+ help="Launch salome servers and start gui")
+parser.add_option("-t", "--tui", action="store_true", dest="tui", default=False,
+ help="Launch salome servers")
+parser.add_option("-e", "--environ", action="store_true", dest="env", default=False,
+ help="return a bash shell with Salome environement set")
+
+# main programm
+def main():
+ (options, args) = parser.parse_args()
+ if not (options.gui or options.tui or options.env):
+ # all options are set to false! activate gui option
+ options.gui=True
+
+ options.extra_args=None
+ if args: # parse optionnal python scripts args
+ options.extra_args=parse_extra_args(args)
+
+ if options.env:
+ # return
+ return bash_shell()
+
+ if options.tui or options.gui:
+ clt=start_salome(options)
+ #if clt != None:
+ # print(" --- registered objects tree in Naming Service ---")
+ # clt.showNS()
+
+def parse_extra_args(args):
+ # these extra args represent python script files with optionnally their arguments
+ extra_args=[] # build a list of dicts (the form required by salome session server)
+ while args:
+ # pull first arg, check it is a file
+ pyfilename=args[0]
+ pyargs=[]
+ args=args[1:]
+ if not os.path.isfile(pyfilename):
+ continue # if the arg is not a file name we skip it
+ if args and args[0].startswith("args:"):
+ #if the next arg is related to pyscript, pull it and process it
+ pyargs=args[0][5:].split(",")
+ args=args[1:]
+ extra_args.append({pyfilename:pyargs})
+ return extra_args
+
+def bash_shell():
+ cmd = ["/bin/bash"]
+ proc = subprocess.Popen(cmd, shell=False, close_fds=True)
+ proc.communicate()
+ return proc.returncode
+
+def start_salome(options):
+ clt=start_orb()
+
+ # Launch Registry Server, and wait for it available in Naming Service
+ RegistryServer().run()
+ clt.waitNS("/Registry")
+
+ # Launch Module Catalog Server, and wait for it available in Naming Service
+ CatalogServer().run()
+ clt.waitNS("/Kernel/ModulCatalog",SALOME_ModuleCatalog.ModuleCatalog)
+
+ # launch SalomeDS server, wait for it available in Naming Service
+ SalomeDSServer().run()
+ clt.waitNS("/Study")
+
+ # launch
+ ConnectionManagerServer().run()
+
+ # launch Session Server
+ if options.gui:
+ # process our list of extra args into a string redeable by session server (json style)
+ pyscriptargs=""
+ if options.extra_args: # pyscripts were specified, we transfer the info to gui
+ pyscriptargs='--pyscript=%s' % json.dumps(options.extra_args)
+ SessionServer().run(pyscriptargs)
+
+ # start launcher server
+ LauncherServer().run()
+ # clt.waitNS("/LauncherServer")
+
+ if not options.gui:
+ # in tui mode, start FactoryServer standalone
+ # ContainerServer().run() CNC KO?
+ # run specified pyscripts, if any
+ if options.extra_args:
+ for file_args_dict in options.extra_args:
+ for f in file_args_dict.keys():
+ command="python3 "+f
+ for arg in file_args_dict[f]:
+ command += " "+arg
+ print ("command to execute pyscript: ", command)
+ proc = subprocess.Popen(command, shell=True)
+ # addToKillList(proc.pid, command, args['port']) ??
+ res = proc.wait()
+ if res: sys.exit(1) # if there's an error when executing script, we should explicitly exit
+
+ if options.gui:
+ session=clt.waitNS("/Kernel/Session",SALOME.Session)
+ return clt
+
+def start_orb():
+ # initialise orb and naming service
+ searchFreePort()
+ print("Initialise ORB and Naming Service")
+ clt=orbmodule.client()
+ return clt
+
+def generate_module_catalog():
+ salome_modules=os.getenv("SALOME_MODULES")
+ assert salome_modules != None, "SALOME_MODULES variable not found!"
+ cata_path=[]
+ for module in salome_modules.split(","):
+ module_root_dir = os.getenv(module + "_ROOT_DIR")
+ module_cata = module + "Catalog.xml"
+ cata_path.extend(glob.glob(os.path.join(module_root_dir,"share","salome",
+ "resources",module.lower(), module_cata)))
+ return ':'.join(cata_path)
+
+# base class to start corba servers
+class Server:
+ CMD=[]
+ def run(self):
+ args = self.CMD
+ pid = os.spawnvp(os.P_NOWAIT, args[0], args)
+ print ("start server ", args, " (pid = %s)" % pid)
+
+class LauncherServer(Server):
+ CMD=['SALOME_LauncherServer']
+
+class ConnectionManagerServer(Server):
+ CMD=['SALOME_ConnectionManagerServer']
+
+class SalomeDSServer(Server):
+ CMD=['SALOMEDS_Server']
+
+class RegistryServer(Server):
+ CMD=['SALOME_Registry_Server', '--salome_session','theSession']
+
+class ContainerServer(Server):
+ CMD=['SALOME_Container','FactoryServer','-ORBInitRef','NameService=corbaname::localhost']
+
+class LoggerServer(Server):
+ CMD=['SALOME_Logger_Server', 'logger.log']
+
+class CatalogServer(Server):
+ CMD=['SALOME_ModuleCatalog_Server','-common']
+ def run(self):
+ self.CMD = self.CMD + [generate_module_catalog()]
+ Server.run(self)
+
+class NotifyServer(Server):
+ CMD=['notifd','-c','${KERNEL_ROOT_DIR}/share/salome/resources/channel.cfg -DFactoryIORFileName=/tmp/${LOGNAME}_rdifact.ior -DChannelIORFileName=/tmp/${LOGNAME}_rdichan.ior']
+
+class SessionServer(Server):
+ CMD=['SALOME_Session_Server','--with','Container','(','FactoryServer',')','--with', 'SalomeAppEngine', '(', ')', 'CPP', 'GUI', 'SPLASH', '--language=fr']
+ def run(self, pyscriptopt):
+ if pyscriptopt: # communicate to gui the scripts to run
+ self.CMD = self.CMD + [pyscriptopt]
+ salome_modules=os.getenv("SALOME_MODULES")
+ assert salome_modules != None, "SALOME_MODULES variable not found!"
+ self.CMD = self.CMD + ['--modules (' + salome_modules.replace(",",":") + ')' ]
+ Server.run(self)
+
+if __name__ == "__main__":
+ main()