Files
modules/init/python.py.in
Xavier Delaruelle 1e4b272ba8 init: explicitly send err output to sys.stderr in python
Update python initialization script to explicitly send error output
to the sys.stderr channel (instead of parent process stderr channel) to
be able to catch this content.
2022-03-24 07:04:45 +01:00

35 lines
1.3 KiB
Python

from __future__ import print_function
import os, sys, re, subprocess
# define modules runtime quarantine configuration
@setquarvars@os.environ['MODULES_RUN_QUARANTINE'] = '@RUN_QUARANTINE@'
@setquarvars@@os.environ['RUNENV_VAR'] = 'RUNENV_VAL'@
@notsetquarvars@#os.environ['MODULES_RUN_QUARANTINE'] = 'ENVVARNAME'
@notsetquarvars@
# setup quarantine if defined
_mlre = os.environ.copy()
if 'MODULES_RUN_QUARANTINE' in os.environ:
for _mlv in os.environ['MODULES_RUN_QUARANTINE'].split():
if re.match('^[A-Za-z_][A-Za-z0-9_]*$', _mlv):
if _mlv in os.environ:
_mlre['__MODULES_QUAR_' + _mlv] = os.environ[_mlv]
_mlrv = 'MODULES_RUNENV_' + _mlv
if _mlrv in os.environ:
_mlre[_mlv] = os.environ[_mlrv]
else:
_mlre[_mlv] = ''
_mlre['__MODULES_QUARANTINE_SET'] = '1'
# define module command and surrounding initial environment (default value
# for MODULESHOME, MODULEPATH, LOADEDMODULES and parse of init config files)
out, err = subprocess.Popen(['@TCLSH@', '@libexecdir@/modulecmd.tcl', 'python', 'autoinit'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=_mlre).communicate()
exec(out)
if err.decode():
print(err.decode(), end='', file=sys.stderr)
# clean temp variables
del _mlre
del out
del err