sys.exit(0)
from salomeContextUtils import getConfigFileNames
- configFileNames, extraEnv, args, unexisting = getConfigFileNames(args, checkExistence=True)
+ configFileNames, args, unexisting = getConfigFileNames(args, checkExistence=True)
if len(unexisting) > 0:
print "ERROR: unexisting configuration/environment file(s): " + ', '.join(unexisting)
# context.addToPythonPath('mypythonpath')
# context.setVariable('myvarname', 'value')
- if extraEnv:
- for key,val in extraEnv.items():
- context.addToVariable(key,val)
-
# Start SALOME, parsing command line arguments
out, err, returncode = context.runSalome(args)
if out:
return configFileNames, args, unexisting
#
-def __validate_pair(ob):
- try:
- if not (len(ob) == 2):
- #print "Unexpected result:", ob
- raise ValueError
- except:
- return False
- return True
-#
-def __get_environment_from_batch_command(env_cmd, initial=None):
- """
- Take a command (either a single command or list of arguments)
- and return the environment created after running that command.
- Note that if the command must be a batch file or .cmd file, or the
- changes to the environment will not be captured.
-
- If initial is supplied, it is used as the initial environment passed
- to the child process.
- """
- #if not isinstance(env_cmd, (list, tuple)):
- # env_cmd = [env_cmd]
- # construct the command that will alter the environment
- #env_cmd = subprocess.list2cmdline(env_cmd)
- # create a tag so we can tell in the output when the proc is done
- tag = 'Done running command'
- # construct a command to do accomplish this
- cmd = '{env_cmd} && echo "{tag}"'.format(**vars())
-
- # launch the process
- proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, env=initial, shell=True)
- # parse the output sent to stdout
- lines = proc.stdout
- # consume whatever output occurs until the tag is reached
- #consume(itertools.takewhile(lambda l: tag not in l, lines))
- # define a way to handle each KEY=VALUE line
- handle_line = lambda l: l.rstrip().split('=',1)
- # parse key/values into pairs
- #pairs = map(handle_line, lines)
- pairs = []
- cpt = 0
- while True:
- line = lines.readline()
- cpt = cpt+1
- if tag in line or cpt > 1000:
- break
- if line:
- pairs.append(line.rstrip().split('=',1))
- # make sure the pairs are valid
- valid_pairs = filter(__validate_pair, pairs)
- # construct a dictionary of the pairs
- result = dict(valid_pairs)
- # let the process finish
- proc.communicate()
- return result
-#
-def __subtract(ref, dic):
- result = {}
- for key,val in ref.items():
- if not dic.has_key(key):
- result[key] = val
- else:
- # compare values types
- if (type(dic[key]) != type(val)):
- result[key] = val
- else:
- # compare values
- if isinstance(val, basestring):
- tolist1 = dic[key].split(os.pathsep)
- tolist2 = val.split(os.pathsep)
- diff = list(set(tolist2)-set(tolist1))
- if diff:
- result[key] = os.pathsep.join(diff)
- else:
- result[key] = val
-
- return result
-#
-
def getConfigFileNames(args, checkExistence=False):
configOptionPrefix = "--config="
configArgs = [ str(x) for x in args if str(x).startswith(configOptionPrefix) ]
if len(configArgs) == 0:
- configFileNames, unexist1 = __getConfigFileNamesDefault(), []
+ configFileNames, unexist = __getConfigFileNamesDefault(), []
else:
# get configuration filenames
- configFileNames, args, unexist1 = __getEnvironmentFileNames(args, configOptionPrefix, checkExistence)
-
- # get extra environment
- extraEnvFileNames, args, unexist2 = __getEnvironmentFileNames(args, "--extra_env=", checkExistence)
- before = __get_environment_from_batch_command("env")
- after = {}
- for filename in extraEnvFileNames:
- after.update(__get_environment_from_batch_command(filename))
- pass
+ configFileNames, args, unexist = __getEnvironmentFileNames(args, configOptionPrefix, checkExistence)
- extraEnv = __subtract(after,before)
- return configFileNames, extraEnv, args, unexist1+unexist2
+ return configFileNames, args, unexist
#
def __getScriptPath(scriptName, searchPathList):
\section salome_launcher The salome command
Usage of \c salome command is:
\code
- salome [command] [options] [--config=<file,folder,...>] [--extra_env=<file,folder,...>]
+ salome [command] [options] [--config=<file,folder,...>]
\endcode
Commands are:
To connect a Python console, use \code salome connect \endcode
There is no options to this command. It asks user which SALOME instance to connect to.
-
-\section batch_files Batch files that set extra environment
-The <tt>--extra_env</tt> option is used to identify a list of batch files (or directories containing such files) that must be considered to create the SALOME execution context. Typically on linux these files are shell scripts that modify the global environment. The salome command determines environment changes implied by running these files to initialize SALOME context. Note that this functionality is not the recommanded way to set SALOME context ; it is provided for backward compatibility and convenience ; prefer \ref context_files solution.
-
\section context_files Context files management
The <tt>--config</tt> option is used to identify the list of configuration files or directories to be used for SALOME context creation. When this option is given, only files provided by user are considered. If user does not specify any context file SALOME will rely on context files detected in the env.d application folder. Two file formats can coexist, with a .cfg or .sh extension that are associated with the new and the former start mechanism, respectively.
- Identify configuration (context) files
\code
from salomeContextUtils import getConfigFileNames
-configFileNames, extraEnv, args, unexisting = getConfigFileNames(args, checkExistence=True)
+configFileNames, args, unexisting = getConfigFileNames(args, checkExistence=True)
\endcode
-extraEnv variable
- Create a context
\code
context = SalomeContext(configFileNames)
# context.addToPythonPath('mypythonpath')
# context.setVariable('myvarname', 'value')
\endcode
-- Initializing extra environment variables parsed from batch files:
-\code
-if extraEnv:
- for key,val in extraEnv.items():
- context.addToVariable(key,val)
-\endcode
- Run SALOME
\code
(out, err), returncode = context.runSalome(args)