Salome HOME
Deal with ref count server side.
[modules/kernel.git] / bin / runSession.py
index e3b5f0857269b73356ce963d4dd7a5c58b0ae95a..92c6b4705936450753b0c0c2375419ef5687f477 100644 (file)
@@ -1,5 +1,5 @@
 #  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2012  CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2007-2014  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
@@ -7,7 +7,7 @@
 # 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.
+# 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
@@ -25,6 +25,8 @@ import os
 import sys
 from optparse import OptionParser
 from NSparam import getNSparams
+import socket
+import subprocess
 
 # Use to display newlines (\n) in epilog
 class MyParser(OptionParser):
@@ -45,11 +47,11 @@ If MACHINE is not given, try to connect to the session associated to PORT on the
 If PORT is not given, try to connect to the remote session associated to port 2810 on MACHINE.\n\n"""
   parser = MyParser(usage=usage, epilog=epilog)
   parser.add_option("-p", "--port", metavar="<port>", default=0,
-                    action="store", type="int", dest="port",
+                    action="store", type="string", dest="port",
                     help="The port to connect to."
                     )
   parser.add_option("-m", "--machine", metavar="<machine>", default=0,
-                    action="store", type="int", dest="machine",
+                    action="store", type="string", dest="host",
                     help="The machine to connect to."
                     )
   try:
@@ -59,12 +61,12 @@ If PORT is not given, try to connect to the remote session associated to port 28
     return
 
   port = options.port
-  machine = options.machine
+  host = options.host
 
   # :GLITCH: this code defines specific environment variables (OMNIORB_CONFIG, NSPORT,
   # NSHOST) which are later used by other modules. Working, but not really "safe"...
   if not port:
-    if not machine:
+    if not host:
       # neither MACHINE nor PORT are given
       # --- set omniORB configuration to current session if any
       omniorbUserPath = os.environ['OMNIORB_USER_PATH']
@@ -73,32 +75,28 @@ If PORT is not given, try to connect to the remote session associated to port 28
         os.environ['OMNIORB_CONFIG'] = fileOmniConfig
         # --- set environment variables for port and hostname of NamingService
         host, port = getNSparams()
-        os.environ['NSHOST'] = host
-        os.environ['NSPORT'] = port
       else:
         # No running session
-        os.environ['NSHOST'] = "no_host"
-        os.environ['NSPORT'] = "no_port"
-        pass
+        host = "no_host"
+        port = "no_port"
     else:
       # only MACHINE is given
-      _writeConfigFile(2810, os.environ['NSHOST'])
+      port = '2810'
+      _writeConfigFile(port, host)
     #
   else:
-    if not machine:
+    if not host:
       # only PORT is given
-      os.environ['NSHOST'] = `hostname`
-      pass
+      host = socket.gethostname()
     # both MACHINE and PORT are given
-    _writeConfigFile(os.environ['NSPORT'], os.environ['NSHOST'])
+    _writeConfigFile(port, host)
   #
+  os.environ['NSPORT'] = port
+  os.environ['NSHOST'] = host
 #
 
 # --- set the OMNIORB_CONFIG file and environment relative to this run of SALOME
 def _writeConfigFile(port, host):
-  os.environ['NSPORT'] = port
-  os.environ['NSHOST'] = host
-
   path = os.environ['OMNIORB_USER_PATH']
   kwargs = {'with_username' : os.environ['USER']}
 
@@ -107,3 +105,40 @@ def _writeConfigFile(port, host):
 
   os.environ['OMNIORB_CONFIG'] = filename
 #
+
+# command looks like a Bash command-line:
+# script1.py [args] ; script2.py [args] ; ...
+def runSession(command):
+  if command:
+    sep = ";"
+    if sys.platform == "win32":
+      sep= "&"
+    command = command.split(sep)
+    outmsg = []
+    errmsg = []
+    for cmd in command:
+      save_cmd = cmd
+      cmd = cmd.strip().split(' ')
+      #proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+      proc = subprocess.Popen(cmd)
+      (stdoutdata, stderrdata) = proc.communicate()
+      if stdoutdata:
+        outmsg.append(stdoutdata)
+      if stderrdata:
+        errmsg.append(stderrdata)
+
+      if proc.returncode != 0:
+        errmsg.append("Error raised when executing command: %s\n"%save_cmd)
+        if outmsg:
+          sys.stdout.write("".join(outmsg))
+        if errmsg:
+          sys.stderr.write("".join(errmsg))
+        sys.exit(proc.returncode)
+
+    return ("".join(outmsg), "".join(errmsg))
+  else:
+    absoluteAppliPath = os.getenv('ABSOLUTE_APPLI_PATH','')
+    cmd = ["/bin/bash",  "--rcfile", absoluteAppliPath + "/.bashrc" ]
+    proc = subprocess.Popen(cmd, shell=False, close_fds=True)
+    return proc.communicate()
+#