环境变量配置
| 20 | |
| 21 | |
| 22 | class EnvSet(object): |
| 23 | """环境变量配置 |
| 24 | """ |
| 25 | def __update_os_environ(self, envs, task_mode = True): |
| 26 | """ |
| 27 | 添加到当前进程的环境变量中.将生效写进函数中,用于逐行生效,多条环境变量设置参数存在一定顺序的依赖。 |
| 28 | 例如用户填写环境变量: |
| 29 | JDK = /data/jdk1.9 |
| 30 | PATH = $JDK/bin:$PATH |
| 31 | 第二条参数需要在第一条已经生效的情况下执行,因此,环境变量设置改为逐条expandvars与update。 |
| 32 | 由于函数功能改变,因此将名称改回update_os_environ。 |
| 33 | |
| 34 | 修改待设置的环境变量的编码,并更新到当前进程的环境变量列表中 - 将"当前系统"改为"当前进程",将方法名"update_os_environ" 修改为"revise_os_environ_encode" |
| 35 | 增加该函数的原因是在Windows设置的环境变量值不能为unicode, |
| 36 | 如果为unicode且显式传递给subprocess模块,则会报错 |
| 37 | |
| 38 | :param envs: dict - 待更新的环境变量列表 |
| 39 | |
| 40 | """ |
| 41 | if not envs: |
| 42 | return |
| 43 | # 判断path环境变量的修改,是否包含path本身,若无则报出error信息 |
| 44 | if task_mode: |
| 45 | for env_name, env_value in envs.items(): |
| 46 | if env_name.lower() == 'path': |
| 47 | # 检查PATH设置中是否有path本身的环境变量名 |
| 48 | if env_value.lower().find('path') == -1: |
| 49 | logger.info('the path env error: %s' % env_value) |
| 50 | break |
| 51 | # 检查PATH设置中,PATH自身的引用是否正常,防止误写 |
| 52 | if not env_value.lower().endswith('path'): |
| 53 | index = env_value.lower().find('path') + 4 |
| 54 | if env_value[index] != ':' and env_value[index] != ';': |
| 55 | logger.info('the path env error: %s' % env_value) |
| 56 | break |
| 57 | |
| 58 | if platform.system() == 'Windows': |
| 59 | for env_name, env_value in envs.items(): |
| 60 | new_envs = {} |
| 61 | # windows设置环境变量,可能使用变量代替具体路径 |
| 62 | if re.match(r"^%.*%$", env_value.strip()): |
| 63 | env_value = os.environ.get(env_value.strip("%"), "") |
| 64 | new_envs[env_name] = os.path.expandvars(env_value) |
| 65 | os.environ.update(new_envs) |
| 66 | else: |
| 67 | for env_name, env_value in envs.items(): |
| 68 | logger.debug(f">>> set env {env_name}={os.path.expandvars(env_value)}") |
| 69 | os.environ.update({env_name: os.path.expandvars(env_value)}) |
| 70 | |
| 71 | def set_tool_env(self, tool_config): |
| 72 | """设置工具环境变量, 将工具配置文件中的环境变量添加到当前进程环境变量中 |
| 73 | :param tool_config: 工具配置参数 |
| 74 | { |
| 75 | "common": |
| 76 | { |
| 77 | "env_path" : {"xxx": "xxx", "xxx": "xxx", ...}, |
| 78 | "env_value" : {"xxx": "xxx", "xxx": "xxx", ...}, |
| 79 | "path" : ["xxx", "xxx"], |
no outgoing calls
no test coverage detected