#! /usr/bin/env python3
-# Copyright (C) 2013-2019 CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2013-2020 CEA/DEN, EDF R&D, OPEN CASCADE
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
import tempfile
import pickle
import subprocess
+import sys
import platform
from salomeContextUtils import SalomeContextException
env_copy = os.environ.copy()
selfBytes= pickle.dumps(self, protocol=0)
argsBytes= pickle.dumps(args, protocol=0)
- proc = subprocess.Popen(['python3', os.path.join(absoluteAppliPath,"bin","salome","salomeContext.py"), selfBytes.decode(), argsBytes.decode()], shell=False, close_fds=True, env=env_copy)
+ proc = subprocess.Popen(['python3', os.path.join(absoluteAppliPath,"bin","salome","salomeContext.py"), selfBytes.decode('latin1'), argsBytes.decode('latin1')], shell=False, close_fds=True, env=env_copy)
out, err = proc.communicate()
return out, err, proc.returncode
#
"""Append value to LD_LIBRARY_PATH environment variable"""
def addToLdLibraryPath(self, value):
- if platform.system() == 'Windows':
+ if sys.platform == 'win32':
self.addToVariable('PATH', value)
- elif platform.system() == 'Darwin':
+ elif sys.platform == 'darwin':
if "LAPACK" in value:
self.addToVariable('DYLD_FALLBACK_LIBRARY_PATH', value)
else:
os.environ[name] = value
#
+ def setDefaultValue(self, name, value):
+ """ Set environment variable only if it is undefined."""
+ env = os.getenv(name, '')
+ if not env:
+ value = os.path.expandvars(value) # expand environment variables
+ self.getLogger().debug("Set environment variable: %s=%s", name, value)
+ os.environ[name] = value
+
"""Unset environment variable"""
def unsetVariable(self, name):
if os.environ.has_key(name):
if reserved is None:
reserved = []
try:
- unsetVars, configVars, reservedDict = parseConfigFile(filename, reserved)
+ configInfo = parseConfigFile(filename, reserved)
+ unsetVars = configInfo.unsetVariables
+ configVars = configInfo.outputVariables
+ reservedDict = configInfo.reservedValues
+ defaultValues = configInfo.defaultValues
except SalomeContextException as e:
msg = "%s"%e
self.getLogger().error(msg)
self.setVariable(key, val, overwrite=True)
pass
+ for key,val in defaultValues:
+ self.setDefaultValue(key, val)
+ pass
+
pythonpath = os.getenv('PYTHONPATH','').split(os.pathsep)
pythonpath = [ os.path.realpath(x) for x in pythonpath ]
sys.path[:0] = pythonpath
print("*** Enter 'exit' (only once!) to leave SALOME context.")
print("***")
- cmd = ["/bin/bash"]
+ if sys.platform == 'win32':
+ cmd = ['cmd.exe']
+ else:
+ cmd = ["/bin/bash"]
proc = subprocess.Popen(cmd, shell=False, close_fds=True)
proc.communicate()
return proc.returncode
print("Port number(s) not provided to command: salome kill <port(s)>")
return 1
- from multiprocessing import Process
- from killSalomeWithPort import killMyPort
- import tempfile
+ import subprocess
+ sys.argv = ['kill']
+ import setenv
+ setenv.main(True)
+ if os.getenv("NSHOST") == "no_host":
+ os.unsetenv("NSHOST")
for port in ports:
- with tempfile.NamedTemporaryFile():
- p = Process(target = killMyPort, args=(port,))
- p.start()
- p.join()
+ proc = subprocess.Popen(["killSalomeWithPort.py", port])
+ proc.communicate()
+
return 0
#
def _killAll(self, unused=None):
+ sys.argv = ['killAll']
+ import setenv
+ setenv.main(True)
+ if os.getenv("NSHOST") == "no_host":
+ os.unsetenv("NSHOST")
try:
import PortManager # mandatory
- from multiprocessing import Process
- from killSalomeWithPort import killMyPort
+ import subprocess
ports = PortManager.getBusyPorts()['this']
if ports:
- import tempfile
for port in ports:
- with tempfile.NamedTemporaryFile():
- p = Process(target = killMyPort, args=(port,))
- p.start()
- p.join()
+ proc = subprocess.Popen(["killSalomeWithPort.py", str(port)])
+ proc.communicate()
except ImportError:
# :TODO: should be declared obsolete
from killSalome import killAllPorts
if __name__ == "__main__":
if len(sys.argv) == 3:
- context = pickle.loads(sys.argv[1].encode())
- args = pickle.loads(sys.argv[2].encode())
+ context = pickle.loads(sys.argv[1].encode('latin1'))
+ args = pickle.loads(sys.argv[2].encode('latin1'))
status = context._startSalome(args)
sys.exit(status)