-#!/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 ' , '\"' + upath + '\"', ' -errlog', '\"' + 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 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 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
- #cmd_str = "\"" + string.join(command, " ") + "\""
- #print cmd_str
- #pid = win32pm.spawnpid( cmd_str )
- pid = win32pm.spawnpid( string.join(command, " "), '-nc' )
- #pid = win32pm.spawnpid( string.join(command, " ") )
- 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)
+#!/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