这里提供一段代码用于初始化变量。该变量不是来自脚本内部定义或调用 Python 脚本时传入的参数,而是来源于系统环境变量,常见于构建流水线中构建机的环境设置。以下是代码示例:
python
@dataclass
class StartupVars:
BRANCH_TAG: str = "0DefaultBranch"
APP_VERSION: str = "0.0.0.0"
RES_VERSION: str = "0.0.0.1"
BUILD_TARGET: str = "Unknown"
PIPELINE_TAG: str = "Unknown"
CONFIG_SUFFIX: str = ""
BK_CI_PIPELINE_ID: str = "p-xxx"
BK_CI_BUILD_ID: str = "b-xxx"
BK_CI_BUILD_NUM: str = "000"
BK_CI_BUILD_TASK_ID: str = "t-xxx"
BK_CI_PARENT_PIPELINE_ID: str = ""
BK_CI_PARENT_BUILD_ID: str = ""
EXCEL_CONF_KEY: str = ""
PROJECT_NAME: str = "myGame"
def init_startup_vars(): # pragma
keys = [field.name for field in fields(StartupVars)]
selected_env_vars = {k: os.environ[k] for k in keys if k in os.environ}
global startup_vars
startup_vars = StartupVars(**selected_env_vars)
我们来分析下init_startup_vars函数
python
keys = [field.name for field in fields(StartupVars)]
这里使用dataclasses.fields()函数获取StartupVars数据类的所有字段
提取字段名称列表,如:['BRANCH_TAG', 'APP_VERSION', 'BUILD_TARGET', ...]
python
selected_env_vars = {k: os.environ[k] for k in keys if k in os.environ}
遍历所有StartupVars字段名,只选择那些在系统环境变量中存在的字段并创建包含有效环境变量的字典。想要的变量已经存入了selected_env_vars
python
global startup_vars
startup_vars = StartupVars(**selected_env_vars)
这里声明全局变量startup_vars,使用筛选后的环境变量字典创建StartupVars实例
未在环境变量中设置的字段将使用StartupVars类中定义的默认值
StartupVars数据类结构,如上面的代码,使用数据类确保类型安全,所有字段都有明确的类型注解和默认值,有效避免运行时类型错误
后面使用这些参数,直接这样访问
python
# 在任何需要的地方访问启动配置
branch = startup_vars.BRANCH_TAG
version = startup_vars.APP_VERSION
或者有些情况下转为字典后通过字符串访问
python
def startup_vars_dict():
return asdict(startup_vars)
startupVarsDict = startup_vars_dict()
startupVarsDict["BRANCH_TAG"]