Python脚本执行export后读取环境变量失败,问题出在哪?
问题原因
你用subprocess.getoutput()执行export命令时,会启动一个独立的子shell进程,这个环境变量只在该子shell内部有效。当命令执行完毕,子shell进程退出,环境变量不会传递回当前的Python主进程。而os.environ['XYZ']读取的是Python主进程自己的环境变量,自然找不到这个不存在的变量,所以抛出KeyError。
正确解决方法
根据你的需求,分两种场景处理:
场景1:仅在当前Python进程中设置环境变量
不需要调用subprocess,直接通过os.environ修改当前进程的环境变量:
import os if __name__ == "__main__": # 直接在当前Python进程设置环境变量 os.environ['XYZ'] = "/home/" home_dir = os.environ['XYZ'] print(f'{home_dir}')
场景2:让subprocess启动的其他子进程使用该环境变量
如果是要让后续通过subprocess启动的命令能用到这个变量,有两种方式:
- 先在Python进程中设置,子进程会自动继承:
import subprocess import os if __name__ == "__main__": os.environ['XYZ'] = "/home/" # 启动子进程时,会继承当前Python进程的环境变量 result = subprocess.getoutput('echo $XYZ') print(result) # 输出:/home/
- 直接在同一个shell会话中执行
export和后续命令(仅在该shell会话内有效):
import subprocess if __name__ == "__main__": # 将export和需要用变量的命令放在同一个shell命令里 command = "export XYZ=\"/home/\"; echo $XYZ" output_str = subprocess.getoutput(command) print(output_str) # 输出:/home/
内容的提问来源于stack exchange,提问作者user366312
相关产品推荐
相关产品推荐

