有些脚本调外部命令时,只想临时加一个环境变量。直接改 os.environ 也能跑,但影响范围有点大,后面再起别的子进程可能就被带偏了。
环境:Python 3.10+,Linux/macOS/Windows,只用标准库。保存为 subprocess-env-demo.py:
import os
import subprocess
import sys
child_env = os.environ.copy()
child_env["DEMO_MODE"] = "1"
result = subprocess.run(
[sys.executable, "-c", "import os; print(os.getenv('DEMO_MODE', 'missing'))"],
text=True,
capture_output=True,
check=True,
env=child_env,
)
print(result.stdout.strip())
print("parent:", os.environ.get("DEMO_MODE", "missing"))
跑一下:
python3 subprocess-env-demo.py
输出里子进程能看到 DEMO_MODE=1,父进程还是 missing。这招适合给某个命令临时塞配置,尤其是测试脚本里,少一点隐藏状态会好排查很多。