]> SALOME platform Git repositories - modules/kernel.git/blob - bin/salome_session.py
Salome HOME
Join modifications from branch BR_PR_V320b1
[modules/kernel.git] / bin / salome_session.py
1
2 import os
3 import sys
4 import string
5 import socket
6
7 _session = None
8
9 def startSession(modules=[]):
10     global _session
11     if _session: return
12     searchFreePort()
13     _session = SalomeSession(modules)
14     return
15
16 def getShortHostName():
17     """
18     gives Hostname without domain extension.
19     SALOME naming service needs short Hostnames (without domain extension).
20     HOSTNAME is not allways defined in environment,
21     socket.gethostname() gives short or complete Hostname, depending on
22     defined aliases.
23     """
24     return string.split(socket.gethostname(),'.')[0]
25
26 def searchFreePort():
27     print "Searching a free port for naming service:",
28     NSPORT=2810
29     limit=NSPORT
30     limit=limit+100
31     while 1:
32         print "%s "%(NSPORT),
33         status = os.system("netstat -ltn | grep -E :%s"%(NSPORT))
34         if status:
35             home = os.environ['HOME']
36             appli=os.environ.get("APPLI")
37             if appli is None:
38                 #Run outside application context
39                 home=home
40             else:
41                 home='%s/%s'%(home,appli)
42             hostname=getShortHostName()
43             omniorb_config = '%s/.omniORB_%s_%s.cfg'%(home,hostname, NSPORT)
44             os.environ['OMNIORB_CONFIG'] = omniorb_config
45             f = open(omniorb_config, "w")
46             f.write("ORBInitRef NameService=corbaname::%s:%s\n"%(hostname, NSPORT))
47             f.close()
48             last_running_config = '%s/.omniORB_%s_last.cfg'%(home, hostname)
49             os.environ['LAST_RUNNING_CONFIG'] = last_running_config
50             if os.access(last_running_config,os.F_OK):
51                 os.unlink(last_running_config)
52                 pass
53             os.symlink(omniorb_config,last_running_config)
54             #            LAST_RUNNING_CONFIG=${HOME}/${APPLI}/.omniORB_${myhost}_last.cfg
55             print "- Ok"
56             break
57         if NSPORT == limit:
58             msg  = ""
59             msg += "I Can't find a free port to launch omniNames\n"
60             msg += "I suggest you to kill the running servers and try again.\n"
61             raise msg
62         NSPORT=NSPORT+1
63         pass
64     os.environ['NSHOST']=hostname
65     os.environ['NSPORT']=str(NSPORT)
66     return NSPORT
67
68
69 class SalomeSession(object):
70     import runSalome
71     import killSalomeWithPort
72     import killSalome
73     def __init__(self, modules):
74         import runSalome
75         sys.argv  = ["dummy.py"]
76         sys.argv += ["--terminal"]
77         if modules:
78             sys.argv += ['--modules=%s'%(",".join(modules))]
79             pass
80         runSalome.clt, runSalome.args = runSalome.main()
81         import salome
82         salome.salome_init()
83         return
84     def __del__(self):
85         import runSalome
86         runSalome.killLocalPort()
87         return
88     pass