Salome HOME
[EDF29322] Take into account SALOME_APPLI_OPTIONS as a second way to pilot argument...
[modules/kernel.git] / bin / appliskel / salome_common.py
1 #! /usr/bin/env python3
2 # Copyright (C) 2021-2023  CEA, EDF
3 #
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License, or (at your option) any later version.
8 #
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 # Lesser General Public License for more details.
13 #
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
17 #
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 #
20
21 import json
22 import logging
23 import os
24 import subprocess
25 import sys
26 from pathlib import Path
27
28 logging.basicConfig(level=logging.INFO)
29 logger = logging.getLogger(__name__)
30
31
32 def main(args):
33     ''' Load modules then launch salome
34     '''
35     appliPath = Path(__file__).parent.resolve()
36     modules_file = appliPath / "env_modules.json"
37     if modules_file.is_file():
38         env_modules = json.loads(open(modules_file).read()).get('env_modules', [])
39         env_modules_option = "--with-env-modules="
40         env_modules_l = [x for x in args if x.startswith(env_modules_option)]
41         if env_modules_l:
42             env_modules += env_modules_l[-1][len(env_modules_option):].split(',')
43             args = [x for x in args if not x.startswith(env_modules_option)]
44         env_modules_option += "%s" % ','.join(env_modules)
45         args.append(env_modules_option)
46     
47     salome_appli_options = os.environ.get("SALOME_APPLI_OPTIONS")
48     if salome_appli_options:
49         command = ""
50         options = []
51         if args:
52             command = args[0]
53             options = args[1:] if len(args) > 1 else []
54         args = []
55         if command:
56             args.append(command)
57         args = args + salome_appli_options.split() + options
58     
59     logger.debug(f"args: {args}")
60
61     os.environ["ROOT_SALOME_INSTALL"] = f"{appliPath}"
62     salome_run_script = appliPath / '.salome_run'
63     proc = subprocess.Popen([f"{salome_run_script}"] + args, close_fds=True)
64     out, err = proc.communicate()
65     sys.exit(proc.returncode)