Linux环境下Python如何读取运行时新增的环境变量?
动态获取最新环境变量的实现方法
Python的os.environ只会在进程启动时加载一次父进程的环境变量,之后系统或shell中修改的环境变量不会自动同步到Python进程。以下是两种可行的解决方法:
方法一:通过调用Shell命令获取最新环境变量
每次需要获取环境变量时,启动一个新的Shell进程并输出当前环境变量,再解析成字典。这种方法能拿到当前Shell会话中临时export的变量,或者加载配置文件后的环境变量。
示例代码:
import subprocess def get_latest_env(): # 启动bash并执行env命令输出所有环境变量,可按需加载.bashrc result = subprocess.run( ['bash', '-c', 'source ~/.bashrc && env'], capture_output=True, text=True, check=True ) env_dict = {} # 解析输出为键值对 for line in result.stdout.splitlines(): if '=' in line: key, value = line.split('=', 1) env_dict[key] = value return env_dict # 使用示例 latest_env = get_latest_env() print(latest_env.get('YOUR_CUSTOM_VAR'))
- 若不需要加载
.bashrc,可以把命令改成bash -c 'env',直接获取当前Shell继承的环境变量。 - 该方法依赖于启动Python进程的Shell环境,如果Python在后台运行(如systemd服务),可能需要调整命令以加载对应的配置文件。
方法二:通过配置文件动态读取(推荐长期运行程序)
把需要动态修改的环境变量放到单独的配置文件(如.env),Python定时读取并更新自身环境变量。这种方式不依赖Shell环境,更稳定可控。
步骤1:创建.env配置文件
# .env文件内容 APP_DEBUG=True DB_HOST=127.0.0.1 CUSTOM_VAR=latest_value
步骤2:Python读取配置文件的代码
import os import time def load_env_from_file(file_path='.env'): env_dict = {} try: with open(file_path, 'r') as f: for line in f: line = line.strip() # 跳过注释和空行 if not line or line.startswith('#'): continue if '=' in line: key, value = line.split('=', 1) env_dict[key.strip()] = value.strip() # 更新os.environ,也可以直接返回字典使用 os.environ.update(env_dict) return env_dict except FileNotFoundError: print(f"配置文件{file_path}不存在") return {} # 定时读取配置(示例:每5分钟更新一次) while True: load_env_from_file() print("当前CUSTOM_VAR值:", os.environ.get('CUSTOM_VAR')) time.sleep(300)
补充说明
- 系统级环境变量(如
/etc/environment)可以直接读取文件解析,但注意文件格式差异,部分变量可能带引号或有特殊写法,需要额外处理。 - 避免频繁调用Shell命令,会产生进程开销,长期运行的程序优先选择配置文件方案。
内容的提问来源于stack exchange,提问作者Bharath S
相关产品推荐
相关产品推荐

