# 读取环境变量 path = os.environ['PATH'] home = os.environ.get('HOME', '/default/path')
# 设置环境变量 os.environ['MY_VAR'] = 'my_value'
# 删除环境变量 del os.environ['MY_VAR']
2.2 特殊行为
键值必须是字符串类型
在 Windows 系统中,键的大小写不敏感
在类 Unix 系统中,键的大小写敏感
某些特殊字符可能在不同操作系统中有不同的处理方式
3. 常见使用场景
3.1 环境区分与兼容性处理
3.1.1 自动化测试平台兼容
在自动化测试项目中,经常需要处理本地开发环境和测试平台执行环境的差异。以下是一个实际案例:
1 2 3 4 5 6 7
# 通过环境变量区分执行环境,处理参数冲突 if os.environ.get('BUILD_ID') or os.environ.get('buildId'): # xxx 平台环境 print(f"BUILD_ID: {os.environ.get('BUILD_ID')}, buildId:{os.environ.get('buildId')}") else: # 本地环境 parser.addoption( "--serial", action="store", default=None, help="the id of the master device to be executed. ")
# 安全地转换环境变量值 defget_int_env(key, default=None): value = os.environ.get(key) if value isNone: return default try: returnint(value) except ValueError: raise ValueError(f"Environment variable {key} must be an integer")
5. 常见陷阱
修改环境变量不会影响系统环境变量
子进程会继承环境变量,但对子进程的修改不会影响父进程
在多线程环境中修改环境变量可能导致竞态条件
Windows 和 Unix 系统对环境变量的处理有所不同
6. 调试技巧
6.1 环境变量查看
1 2 3 4 5 6 7
# 打印所有环境变量 for key, value in os.environ.items(): print(f"{key}: {value}")
# 检查特定环境变量是否存在 if'MY_VAR'in os.environ: print("MY_VAR is set")
@contextlib.contextmanager deftemporary_env(**kwargs): """临时设置环境变量的上下文管理器""" original = {} try: for key, value in kwargs.items(): if key in os.environ: # 将已存在的环境变量临时存储,更新环境变量 original[key] = os.environ[key] os.environ[key] = str(value) # 如果要添加的变量不存在,直接添加 yield finally: for key in kwargs: if key in original: # 将临时存储的变量改为初始值 os.environ[key] = original[key] else: del os.environ[key] # 之前不存在的变量,删除
# 使用示例 with temporary_env(DEBUG='true', ENV='testing'): run_tests()