| 12345678910111213141516171819202122232425 |
- """
- conf/env.sh 跨语言单源 bootstrap。
- 用法:在 dw_base/__init__.py 顶部调用一次,之后 Python 侧通过 os.environ[X] 读取。
- 实现:让 bash 自己解析 env.sh(`bash -c '. env.sh && env -0'`),避免重写解析器导致 bash/python 双解析漂移。
- """
- import os
- import subprocess
- from pathlib import Path
- def bootstrap_env(env_sh_path: str = None) -> None:
- if env_sh_path is None:
- project_root = Path(__file__).resolve().parents[2]
- env_sh_path = str(project_root / 'conf' / 'env.sh')
- result = subprocess.run(
- ['bash', '-c', f'. "{env_sh_path}" && env -0'],
- stdout=subprocess.PIPE, stderr=subprocess.PIPE, check=True,
- )
- for entry in result.stdout.split(b'\x00'):
- if not entry:
- continue
- key, _, value = entry.decode().partition('=')
- # setdefault: 若 shell 侧已 export(如 init.sh 已 source env.sh),保留 shell 值不覆盖
- os.environ.setdefault(key, value)
|