# -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2017 CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2007-2021 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
help="[Remote mode] The user on the computer to connect to."
)
+ parser.add_option('-l', '--launcher', dest="launcher", default=None,
+ help="[Remote mode] The machine and the port to connect to."
+ )
+
short_args, extra_args = getShortAndExtraArgs(args)
try:
(options, args) = parser.parse_args(short_args)
port = options.port
host = options.host
+ launcher = options.launcher
+ if launcher is not None:
+ pos = launcher.find(":")
+ if pos != -1:
+ host = launcher[0:pos]
+ port = launcher[pos+1:]
# :GLITCH: this code defines specific environment variables (OMNIORB_CONFIG, NSPORT,
# NSHOST) which are later used by other modules. Working, but not really "safe"...
os.environ['OMNIORB_CONFIG'] = fileOmniConfig
# --- set environment variables for port and hostname of NamingService
host, port = getNSparams()
+ try:
+ # keep short name for host, for a correct comparison with getShortHostName() later
+ host=host.split('.')[0]
+ except:
+ pass
else:
# No running session
host = "no_host"
os.environ['NSPORT'] = port
os.environ['NSHOST'] = host
- # determine running mode, taht is either 'local' or 'remote'
+ # determine running mode, that is either 'local' or 'remote'
here = getShortHostName()
mode = "local"
- if host != here and host != "localhost" and host != "no_host":
+ if host != here and host != "localhost" and host != "no_host" and launcher is None:
mode="remote"
pass
params = SessionParameters(mode, port, host, options.user, options.directory)
for cmd in command:
single_cmd = cmd.strip().split(' ')
any_error = False
+ error_code = 1
try:
proc = subprocess.Popen(single_cmd)
(stdoutdata, stderrdata) = proc.communicate() # Wait for process to terminate
if proc.returncode != 0:
any_error = True
+ error_code = proc.returncode
except:
any_error = True
pass
sys.stdout.write("".join(outmsg))
if errmsg:
sys.stderr.write("".join(errmsg))
- sys.exit(1)
+ sys.exit(error_code)
return 0
else:
tmp_in, tmp_out, tmp_script = __copyFiles(params.user, params.machine, script, sa_obj.args or [], sa_obj.out or [])
# execute command on the remote SALOME application
- command = "ssh %s@%s %s/salome shell " % (params.user, params.machine, params.directory)
+ command = "%s/salome shell" % (params.directory)
if params.port:
- command = command + "-p %s "%params.port
- command = command + " %s %s args:%s"%(header, tmp_script, ",".join(tmp_in))
+ command += " -p %s "%params.port
+ command += " %s %s args:%s"%(header, tmp_script, ",".join(tmp_in))
+ # salome shell command must run in a login shell because of module function
+ command = "ssh %s@%s -t 'bash -l -c \"%s\"'" % (params.user, params.machine, command)
print('[ SSH ] ' + command)
os.system(command)