Python中如何将运行时动态变量值赋值给环境变量
问题根源
你现有代码的核心问题是直接将字面量字符串exce写入了导出语句,没有插入异常对象的实际运行时值;同时没有对异常信息中的特殊字符做转义,直接写入会导致后续Shell加载环境变量时出现语法错误。
具体实现
根据环境变量需要生效的范围,分两种场景处理:
场景1:仅对当前Python进程及其启动的子进程生效(临时)
不需要写入文件,直接通过Python内置的os.environ字典设置即可,设置后当前进程和后续它启动的所有子进程都能读取到该环境变量:
import os import logging try: logging.info("Process successful") except Exception as exce: # pylint: disable=broad-except logging.error("Process Failed") logging.error(exce) # 将异常对象转为字符串后赋值给名为result的环境变量 os.environ["result"] = str(exce)
场景2:持久化生效,对后续所有新开的Shell会话有效
如果需要环境变量在Python进程退出后依然存在,可以写入~/.bashrc文件,注意要做特殊字符转义、避免和文件原有内容粘连:
import os import logging try: logging.info("Process successful") except Exception as exce: # pylint: disable=broad-except logging.error("Process Failed") logging.error(exce) # 转义异常信息中的单引号,避免Shell语法报错 exce_content = str(exce).replace("'", "'\\''") bashrc_path = os.path.expanduser("~/.bashrc") with open(bashrc_path, "a", encoding="utf-8") as outfile: # 前后加换行,避免和.bashrc原有内容拼在同一行 write_content = f"\nexport result='{exce_content}'\n" outfile.write(write_content)
注意事项
- 写入
~/.bashrc的环境变量不会在当前已打开的终端、当前运行的Python进程中立刻生效,需要手动执行source ~/.bashrc或者新开Shell会话才会加载。 - 如果需要异常抛出后立刻在当前Python进程启动的子进程中读取到该值,需要同时执行
os.environ["result"] = str(exce)做临时设置。
内容的提问来源于stack exchange,提问作者Oshin aggrawal
相关产品推荐
相关产品推荐

