11from __future__ import annotations
22
3+ import json
34import logging
45import os
56import subprocess
@@ -46,35 +47,45 @@ def __init__(
4647 self .env_vars = env_vars or {}
4748 self .pre_launch_tasks = pre_launch_tasks or (lambda : None )
4849
49- def _set_env_vars (
50+ def _get_env_vars (
5051 self , env_vars : typing .Mapping [str , int | str | None ] | None = None
51- ) -> None :
52+ ) -> dict [ str , str ] :
5253 """(Un)Set environment variables to their associated values.
5354
5455 All values will be converted to strings. If a value is None,
5556 that environment variable will be unset.
5657 """
58+ BASE_ENVIRON = "BASE_ENVIRON"
59+
60+ if BASE_ENVIRON not in os .environ :
61+ venv = os .environ .copy ()
62+ venv [BASE_ENVIRON ] = json .dumps (venv )
63+ else :
64+ venv = json .loads (os .environ [BASE_ENVIRON ])
65+
5766 if env_vars is None :
5867 env_vars = self .env_vars
5968
6069 log .info ("(Un)setting environment vars" )
6170
6271 for key , val in env_vars .items ():
6372 if val is None :
64- if key in os . environ :
65- del os . environ [key ]
73+ if key in venv :
74+ del venv [key ]
6675 else :
67- os . environ [key ] = str (val )
76+ venv [key ] = str (val )
6877
69- if not os .environ ["PYTHONPATH" ]:
70- os .environ ["PYTHONPATH" ] = ""
71- os .environ ["PYTHONPATH" ] = os .pathsep .join (
78+ PYTHONPATH = "PYTHONPATH"
79+ if PYTHONPATH not in venv :
80+ venv [PYTHONPATH ] = ""
81+ venv [PYTHONPATH ] = os .pathsep .join (
7282 [
73- os . environ [ " PYTHONPATH" ],
83+ venv [ PYTHONPATH ],
7484 str (get_production_path () / "../pipeline/pipeline/lib/python/any" ),
7585 ]
7686 )
77- print (os .environ ["PYTHONPATH" ])
87+ print (venv [PYTHONPATH ])
88+ return venv
7889
7990 def launch (
8091 self ,
@@ -97,11 +108,11 @@ def launch(
97108
98109 fix_launcher_metadata ()
99110 pre_launch_tasks ()
100- self ._set_env_vars ()
111+ venv = self ._get_env_vars ()
101112
102113 log .info ("Launching the software" )
103114 log .debug (f"Command: { command } , Args: { args } " )
104- subprocess .call ([command ] + list (args or []))
115+ subprocess .call ([command ] + list (args or []), env = venv )
105116
106117
107118class DCCLocalizer (DCCLocalizerInterface ):
0 commit comments