-#!/usr/bin/env python
+#!/usr/bin/env python3
+# -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2016 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, or (at your option) any later version.
+#
+# 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 = {}
# -----------------------------------------------------------------------------
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)
- env_ld_library_path=['env', 'LD_LIBRARY_PATH='
- + os.getenv("LD_LIBRARY_PATH")]
- myargs = myargs +['-T']+self.CMD[:1]+['-e'] + env_ld_library_path
+ if sys.platform == "darwin":
+ env_ld_library_path=['env', 'DYLD_LIBRARY_PATH='
+ + os.getenv("DYLD_FALLBACK_LIBRARY_PATH")]
+ myargs = myargs +['-T']+self.CMD[:1]+['-e'] + env_ld_library_path
+ elif 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
+ # 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, " ") )
- else:
- #pid = os.spawnvp(os.P_NOWAIT, command[0], command)
+ import subprocess
+ pid = subprocess.Popen(command).pid
+ 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)
- process_id[pid]=self.CMD
+ if pid is not None:
+ #store process pid if it really exists
+ process_id[pid]=self.CMD
self.PID = pid
return pid
os.waitpid(pid,0) #remove zombie
os.close(c2pread)
# return : first parent
- return int(data)
+ childpid=int(data)
+ if childpid==-1:
+ return None
+ try:
+ os.kill(childpid,0)
+ return childpid
+ except:
+ return None
#first child
# decouple from parent environment
pid = os.fork()
if pid > 0:
#send real pid to parent
- os.write(c2pwrite,"%d" % pid)
+ pid_str = "%d" % pid
+ os.write(c2pwrite,pid_str.encode())
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)
+ except OSError as e:
+ print("fork #2 failed: %d (%s)" % (e.errno, e.strerror), file=sys.stderr)
os.write(c2pwrite,"-1")
os.close(c2pwrite)
sys.exit(1)
os.open("/dev/null", os.O_RDWR) # redirect standard input (0) to /dev/null
try:
os.execvp(args[0], args)
- except OSError, e:
- print >>sys.stderr, "(%s) launch failed: %d (%s)" % (args[0],e.errno, e.strerror)
+ except OSError as e:
+ print("(%s) launch failed: %d (%s)" % (args[0],e.errno, e.strerror), file=sys.stderr)
os._exit(127)