-#!/usr/bin/env python\r
-# -*- coding: iso-8859-1 -*-\r
-# Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE\r
-#\r
-# Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,\r
-# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS\r
-#\r
-# This library is free software; you can redistribute it and/or\r
-# modify it under the terms of the GNU Lesser General Public\r
-# License as published by the Free Software Foundation; either\r
-# version 2.1 of the License.\r
-#\r
-# This library is distributed in the hope that it will be useful,\r
-# but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\r
-# Lesser General Public License for more details.\r
-#\r
-# You should have received a copy of the GNU Lesser General Public\r
-# License along with this library; if not, write to the Free Software\r
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\r
-#\r
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com\r
-#\r
-\r
-import sys, os, re, socket\r
-#import commands\r
-from server import *\r
-from Utils_Identity import getShortHostName\r
-from launchConfigureParser import verbose\r
-\r
-# -----------------------------------------------------------------------------\r
-\r
-class NamingServer(Server):\r
- XTERM=""\r
- USER=os.getenv('USER')\r
- if USER is None:\r
- USER='anonymous'\r
- #os.system("mkdir -m 777 -p /tmp/logs")\r
- LOGDIR="/tmp/logs/" + USER\r
-\r
- def initNSArgs(self):\r
- if sys.platform == "win32":\r
- # temporarily using home directory for Namning Service logs\r
- # to be replaced with TEMP later...\r
- os.environ["BaseDir"]=os.environ["HOME"]\r
- else:\r
- os.environ["BaseDir"]="/tmp"\r
-\r
- try:\r
- os.mkdir(os.environ["BaseDir"] + "/logs")\r
- os.chmod(os.environ["BaseDir"] + "/logs", 0777)\r
- except:\r
- #print "Can't create " + os.environ["BaseDir"] + "/logs"\r
- pass\r
-\r
- upath = os.environ["BaseDir"] + "/logs/";\r
- if sys.platform == "win32":\r
- upath += os.environ["Username"];\r
- else:\r
- upath += os.environ["USER"];\r
-\r
- try:\r
- os.mkdir(upath)\r
- except:\r
- #print "Can't create " + upath\r
- pass\r
-\r
- if verbose(): print "Name Service... ",\r
- #hname=os.environ["HOST"] #commands.getoutput("hostname")\r
- if sys.platform == "win32":\r
- hname=getShortHostName();\r
- else:\r
- hname = socket.gethostname();\r
- #print "hname=",hname\r
-\r
- f=open(os.environ["OMNIORB_CONFIG"])\r
- ss=re.findall("NameService=corbaname::" + hname + ":\d+", f.read())\r
- if verbose(): print "ss = ", ss,\r
- f.close()\r
- sl=ss[0]\r
- ll = sl.split(':')\r
- aPort = ll[-1]\r
- #aPort=(ss.join().split(':'))[2];\r
- #aPort=re.findall("\d+", ss[0])[0]\r
-\r
- # \begin{E.A.}\r
- # put the log files of omniNames in different directory with port reference,\r
- # it is cleaner on linux and it is a fix for salome since it is impossible to\r
- # remove the log files if the corresponding omniNames has not been killed.\r
- # \end{E.A.}\r
- \r
- upath += "/omniNames_%s"%(aPort)\r
- try:\r
- os.mkdir(upath)\r
- except:\r
- #print "Can't create " + upath\r
- pass\r
- \r
- #os.system("touch " + upath + "/dummy")\r
- for fname in os.listdir(upath):\r
- try:\r
- os.remove(upath + "/" + fname)\r
- except:\r
- pass\r
- #os.system("rm -f " + upath + "/omninames* " + upath + "/dummy " + upath + "/*.log")\r
-\r
- #aSedCommand="s/.*NameService=corbaname::" + hname + ":\([[:digit:]]*\)/\1/"\r
- #print "sed command = ", aSedCommand\r
- #aPort = commands.getoutput("sed -e\"" + aSedCommand + "\"" + os.environ["OMNIORB_CONFIG"])\r
- #print "port=", aPort\r
- if sys.platform == "win32":\r
- #print "start omniNames -start " + aPort + " -logdir " + upath\r
- self.CMD=['omniNames', '-start' , aPort , '-nohostname', '-logdir' , os.path.realpath(upath), '-errlog', os.path.realpath(os.path.join(upath,'omniNameErrors.log'))]\r
- #os.system("start omniNames -start " + aPort + " -logdir " + upath)\r
- else:\r
- #self.CMD=['omniNames -start ' , aPort , ' -logdir ' , upath , ' &']\r
- self.CMD=['omniNames','-start' , aPort, '-logdir' , upath, '-errlog', upath+'/omniNameErrors.log']\r
- #os.system("omniNames -start " + aPort + " -logdir " + upath + " &")\r
-\r
- if verbose(): print "... ok"\r
- if verbose(): print "to list contexts and objects bound into the context with the specified name : showNS "\r
-\r
-\r
- def initArgs(self):\r
- Server.initArgs(self)\r
- if sys.platform == "win32":\r
- env_ld_library_path=['env', 'LD_LIBRARY_PATH=' + os.getenv("PATH")]\r
- else:\r
- env_ld_library_path=['env', 'LD_LIBRARY_PATH=' + os.getenv("LD_LIBRARY_PATH")]\r
- self.CMD=['xterm', '-e']+ env_ld_library_path + ['python']\r
- self.initNSArgs()\r
-\r
-# In LifeCycleCORBA, FactoryServer is started with rsh on the requested\r
-# computer if this Container does not exist. Default is localhost.\r
-# Others Containers are started with start_impl method of FactoryServer Container.\r
-# For using rsh it is necessary to have in the ${HOME} directory a .rhosts file\r
-# Warning : on RedHat the file /etc/hosts contains by default a line like :\r
-# 127.0.0.1 bordolex bordolex.paris1.matra-dtv.fr localhost.localdomain localhost \r
-# (bordolex is the station name). omniNames on bordolex will be accessible from other\r
-# computers only if the computer name is removed on that line like :\r
-# 127.0.0.1 bordolex.paris1.matra-dtv.fr localhost.localdomain localhost\r
-\r
-# To start dynamically Containers on several computers you need to\r
-# put in the ${OMNIORB_CONFIG} file a computer name instead of "localhost"\r
-# example : ORBInitRef NameService=corbaname::dm2s0017\r
-\r
-# If you need to use several omniNames running on the same computer, you have to :\r
-#1. put in your ${OMNIORB_CONFIG} file a computer name and port number\r
-# example : ORBInitRef NameService=corbaname::dm2s0017:1515\r
-#2. start omninames with this port number like in orbmodile.py\r
-# example : omniNames -start 1515 -logdir ${BaseDir}/logs/${Username} &\r
-\r
+#!/usr/bin/env python
+# -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2013 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
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+import sys, os, re, socket
+#import commands
+from server import *
+from Utils_Identity import getShortHostName
+from launchConfigureParser import verbose
+
+# -----------------------------------------------------------------------------
+
+class NamingServer(Server):
+ XTERM=""
+ USER=os.getenv('USER')
+ if USER is None:
+ USER='anonymous'
+ #os.system("mkdir -m 777 -p /tmp/logs")
+ LOGDIR="/tmp/logs/" + USER
+
+ def initNSArgs(self):
+ if sys.platform == "win32":
+ # temporarily using home directory for Namning Service logs
+ # to be replaced with TEMP later...
+ os.environ["BaseDir"]=os.environ["HOME"]
+ else:
+ os.environ["BaseDir"]="/tmp"
+
+ try:
+ os.mkdir(os.environ["BaseDir"] + "/logs")
+ os.chmod(os.environ["BaseDir"] + "/logs", 0777)
+ except:
+ #print "Can't create " + os.environ["BaseDir"] + "/logs"
+ pass
+
+ upath = os.environ["BaseDir"] + "/logs/";
+ if sys.platform == "win32":
+ upath += os.environ["Username"];
+ else:
+ upath += os.environ["USER"];
+
+ try:
+ os.mkdir(upath)
+ except:
+ #print "Can't create " + upath
+ pass
+
+ if verbose(): print "Name Service... ",
+ #hname=os.environ["HOST"] #commands.getoutput("hostname")
+ if sys.platform == "win32":
+ hname=getShortHostName();
+ else:
+ hname = socket.gethostname();
+ #print "hname=",hname
+
+ f=open(os.environ["OMNIORB_CONFIG"])
+ ss=re.findall("NameService=corbaname::" + hname + ":\d+", f.read())
+ if verbose(): print "ss = ", ss,
+ f.close()
+ sl=ss[0]
+ ll = sl.split(':')
+ aPort = ll[-1]
+ #aPort=(ss.join().split(':'))[2];
+ #aPort=re.findall("\d+", ss[0])[0]
+
+ # \begin{E.A.}
+ # put the log files of omniNames in different directory with port reference,
+ # it is cleaner on linux and it is a fix for salome since it is impossible to
+ # remove the log files if the corresponding omniNames has not been killed.
+ # \end{E.A.}
+
+ upath += "/omniNames_%s"%(aPort)
+ try:
+ os.mkdir(upath)
+ except:
+ #print "Can't create " + upath
+ pass
+
+ #os.system("touch " + upath + "/dummy")
+ for fname in os.listdir(upath):
+ try:
+ os.remove(upath + "/" + fname)
+ except:
+ pass
+ #os.system("rm -f " + upath + "/omninames* " + upath + "/dummy " + upath + "/*.log")
+
+ #aSedCommand="s/.*NameService=corbaname::" + hname + ":\([[:digit:]]*\)/\1/"
+ #print "sed command = ", aSedCommand
+ #aPort = commands.getoutput("sed -e\"" + aSedCommand + "\"" + os.environ["OMNIORB_CONFIG"])
+ #print "port=", aPort
+ if sys.platform == "win32":
+ #print "start omniNames -start " + aPort + " -logdir " + upath
+ self.CMD=['omniNames', '-start' , aPort , '-nohostname', '-logdir' , os.path.realpath(upath), '-errlog', os.path.realpath(os.path.join(upath,'omniNameErrors.log'))]
+ #os.system("start omniNames -start " + aPort + " -logdir " + upath)
+ else:
+ #self.CMD=['omniNames -start ' , aPort , ' -logdir ' , upath , ' &']
+ self.CMD=['omniNames','-start' , aPort, '-logdir' , upath, '-errlog', upath+'/omniNameErrors.log']
+ #os.system("omniNames -start " + aPort + " -logdir " + upath + " &")
+
+ if verbose(): print "... ok"
+ if verbose(): print "to list contexts and objects bound into the context with the specified name : showNS "
+
+
+ def initArgs(self):
+ Server.initArgs(self)
+ if sys.platform == "win32":
+ env_ld_library_path=['env', 'LD_LIBRARY_PATH=' + os.getenv("PATH")]
+ else:
+ env_ld_library_path=['env', 'LD_LIBRARY_PATH=' + os.getenv("LD_LIBRARY_PATH")]
+ self.CMD=['xterm', '-e']+ env_ld_library_path + ['python']
+ self.initNSArgs()
+
+# In LifeCycleCORBA, FactoryServer is started with rsh on the requested
+# computer if this Container does not exist. Default is localhost.
+# Others Containers are started with start_impl method of FactoryServer Container.
+# For using rsh it is necessary to have in the ${HOME} directory a .rhosts file
+# Warning : on RedHat the file /etc/hosts contains by default a line like :
+# 127.0.0.1 bordolex bordolex.paris1.matra-dtv.fr localhost.localdomain localhost
+# (bordolex is the station name). omniNames on bordolex will be accessible from other
+# computers only if the computer name is removed on that line like :
+# 127.0.0.1 bordolex.paris1.matra-dtv.fr localhost.localdomain localhost
+
+# To start dynamically Containers on several computers you need to
+# put in the ${OMNIORB_CONFIG} file a computer name instead of "localhost"
+# example : ORBInitRef NameService=corbaname::dm2s0017
+
+# If you need to use several omniNames running on the same computer, you have to :
+#1. put in your ${OMNIORB_CONFIG} file a computer name and port number
+# example : ORBInitRef NameService=corbaname::dm2s0017:1515
+#2. start omninames with this port number like in orbmodile.py
+# example : omniNames -start 1515 -logdir ${BaseDir}/logs/${Username} &
+
-#!/usr/bin/env python\r
-# -*- coding: iso-8859-1 -*-\r
-# Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE\r
-#\r
-# Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,\r
-# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS\r
-#\r
-# This library is free software; you can redistribute it and/or\r
-# modify it under the terms of the GNU Lesser General Public\r
-# License as published by the Free Software Foundation; either\r
-# version 2.1 of the License.\r
-#\r
-# This library is distributed in the hope that it will be useful,\r
-# but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\r
-# Lesser General Public License for more details.\r
-#\r
-# You should have received a copy of the GNU Lesser General Public\r
-# License along with this library; if not, write to the Free Software\r
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\r
-#\r
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com\r
-#\r
-\r
-import os, sys, string\r
-from salome_utils import getHostName\r
-process_id = {}\r
-\r
-# -----------------------------------------------------------------------------\r
-#\r
-# Definition des classes d'objets pour le lancement des Server CORBA\r
-#\r
-\r
-class Server:\r
- """Generic class for CORBA server launch"""\r
- \r
- server_launch_mode = "daemon"\r
-\r
- def initArgs(self):\r
- self.PID=None\r
- self.CMD=[]\r
- self.ARGS=[]\r
- if self.args.get('xterm'):\r
- if sys.platform != "win32":\r
- self.ARGS=['xterm', '-iconic', '-sb', '-sl', '500', '-hold']\r
- else:\r
- self.ARGS=['cmd', '/c', 'start cmd.exe', '/K']\r
-\r
- def __init__(self,args):\r
- self.args=args\r
- self.initArgs()\r
-\r
- @staticmethod\r
- def set_server_launch_mode(mode):\r
- if mode == "daemon" or mode == "fork":\r
- Server.server_launch_mode = mode\r
- else:\r
- raise Exception("Unsupported server launch mode: %s" % mode)\r
-\r
- def run(self):\r
- global process_id\r
- myargs=self.ARGS\r
- if self.args.get('xterm'):\r
- # (Debian) send LD_LIBRARY_PATH to children shells (xterm)\r
- if sys.platform != "win32":\r
- env_ld_library_path=['env', 'LD_LIBRARY_PATH='\r
- + os.getenv("LD_LIBRARY_PATH")]\r
- myargs = myargs +['-T']+self.CMD[:1]+['-e'] + env_ld_library_path\r
- command = myargs + self.CMD\r
- #print "command = ", command\r
- if sys.platform == "win32":\r
- import win32pm\r
- pid = win32pm.spawnpid( command, '-nc' )\r
- elif Server.server_launch_mode == "fork":\r
- pid = os.spawnvp(os.P_NOWAIT, command[0], command)\r
- else: # Server launch mode is daemon\r
- pid=self.daemonize(command)\r
- if pid is not None:\r
- #store process pid if it really exists\r
- process_id[pid]=self.CMD\r
- self.PID = pid\r
- return pid\r
-\r
- def daemonize(self,args):\r
- # to daemonize a process need to do the UNIX double-fork magic\r
- # see Stevens, "Advanced Programming in the UNIX Environment" for details (ISBN 0201563177)\r
- # and UNIX Programming FAQ 1.7 How do I get my program to act like a daemon?\r
- # http://www.erlenstar.demon.co.uk/unix/faq_2.html#SEC16\r
- #open a pipe\r
- c2pread, c2pwrite = os.pipe()\r
- #do first fork\r
- pid=os.fork()\r
- if pid > 0:\r
- #first parent\r
- os.close(c2pwrite)\r
- #receive real pid from child\r
- data=os.read(c2pread,24) #read 24 bytes\r
- os.waitpid(pid,0) #remove zombie\r
- os.close(c2pread)\r
- # return : first parent\r
- childpid=int(data)\r
- if childpid==-1:\r
- return None\r
- try:\r
- os.kill(childpid,0)\r
- return childpid\r
- except:\r
- return None\r
-\r
- #first child\r
- # decouple from parent environment\r
- os.setsid()\r
- os.close(c2pread)\r
-\r
- # do second fork : second child not a session leader\r
- try:\r
- pid = os.fork()\r
- if pid > 0:\r
- #send real pid to parent\r
- os.write(c2pwrite,"%d" % pid)\r
- os.close(c2pwrite)\r
- # exit from second parent\r
- os._exit(0)\r
- except OSError, e:\r
- print >>sys.stderr, "fork #2 failed: %d (%s)" % (e.errno, e.strerror)\r
- os.write(c2pwrite,"-1")\r
- os.close(c2pwrite)\r
- sys.exit(1)\r
-\r
- #I am a daemon\r
- os.close(0) #close stdin\r
- os.open("/dev/null", os.O_RDWR) # redirect standard input (0) to /dev/null\r
- try:\r
- os.execvp(args[0], args)\r
- except OSError, e:\r
- if args[0] != "notifd":\r
- print >>sys.stderr, "(%s) launch failed: %d (%s)" % (args[0],e.errno, e.strerror)\r
- pass\r
- os._exit(127)\r
-\r
+#!/usr/bin/env python
+# -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2013 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
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+import os, sys, string
+from salome_utils import getHostName
+process_id = {}
+
+# -----------------------------------------------------------------------------
+#
+# Definition des classes d'objets pour le lancement des Server CORBA
+#
+
+class Server:
+ """Generic class for CORBA server launch"""
+
+ server_launch_mode = "daemon"
+
+ def initArgs(self):
+ self.PID=None
+ self.CMD=[]
+ self.ARGS=[]
+ if self.args.get('xterm'):
+ if sys.platform != "win32":
+ self.ARGS=['xterm', '-iconic', '-sb', '-sl', '500', '-hold']
+ else:
+ self.ARGS=['cmd', '/c', 'start cmd.exe', '/K']
+
+ def __init__(self,args):
+ self.args=args
+ self.initArgs()
+
+ @staticmethod
+ def set_server_launch_mode(mode):
+ if mode == "daemon" or mode == "fork":
+ Server.server_launch_mode = mode
+ else:
+ raise Exception("Unsupported server launch mode: %s" % mode)
+
+ def run(self):
+ global process_id
+ myargs=self.ARGS
+ if self.args.get('xterm'):
+ # (Debian) send LD_LIBRARY_PATH to children shells (xterm)
+ if sys.platform != "win32":
+ env_ld_library_path=['env', 'LD_LIBRARY_PATH='
+ + os.getenv("LD_LIBRARY_PATH")]
+ myargs = myargs +['-T']+self.CMD[:1]+['-e'] + env_ld_library_path
+ command = myargs + self.CMD
+ #print "command = ", command
+ if sys.platform == "win32":
+ import win32pm
+ pid = win32pm.spawnpid( command, '-nc' )
+ elif Server.server_launch_mode == "fork":
+ pid = os.spawnvp(os.P_NOWAIT, command[0], command)
+ else: # Server launch mode is daemon
+ pid=self.daemonize(command)
+ if pid is not None:
+ #store process pid if it really exists
+ process_id[pid]=self.CMD
+ self.PID = pid
+ return pid
+
+ def daemonize(self,args):
+ # to daemonize a process need to do the UNIX double-fork magic
+ # see Stevens, "Advanced Programming in the UNIX Environment" for details (ISBN 0201563177)
+ # and UNIX Programming FAQ 1.7 How do I get my program to act like a daemon?
+ # http://www.erlenstar.demon.co.uk/unix/faq_2.html#SEC16
+ #open a pipe
+ c2pread, c2pwrite = os.pipe()
+ #do first fork
+ pid=os.fork()
+ if pid > 0:
+ #first parent
+ os.close(c2pwrite)
+ #receive real pid from child
+ data=os.read(c2pread,24) #read 24 bytes
+ os.waitpid(pid,0) #remove zombie
+ os.close(c2pread)
+ # return : first parent
+ childpid=int(data)
+ if childpid==-1:
+ return None
+ try:
+ os.kill(childpid,0)
+ return childpid
+ except:
+ return None
+
+ #first child
+ # decouple from parent environment
+ os.setsid()
+ os.close(c2pread)
+
+ # do second fork : second child not a session leader
+ try:
+ pid = os.fork()
+ if pid > 0:
+ #send real pid to parent
+ os.write(c2pwrite,"%d" % pid)
+ os.close(c2pwrite)
+ # exit from second parent
+ os._exit(0)
+ except OSError, e:
+ print >>sys.stderr, "fork #2 failed: %d (%s)" % (e.errno, e.strerror)
+ os.write(c2pwrite,"-1")
+ os.close(c2pwrite)
+ sys.exit(1)
+
+ #I am a daemon
+ os.close(0) #close stdin
+ os.open("/dev/null", os.O_RDWR) # redirect standard input (0) to /dev/null
+ try:
+ os.execvp(args[0], args)
+ except OSError, e:
+ if args[0] != "notifd":
+ print >>sys.stderr, "(%s) launch failed: %d (%s)" % (args[0],e.errno, e.strerror)
+ pass
+ os._exit(127)
+