Python:环境变量未更新 [英] Python: Environment Variables not updating

查看:0
本文介绍了Python:环境变量未更新的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试覆盖到Python中的环境变量。我可以读取值,然后写入值并打印更新后的值。但是,如果我检查命令行中的值,它仍然是原始值。为什么会这样?

首先,我创建了变量

export MYVAR=old_val

我的测试脚本myvar.py

#!/usr/bin/env python3
import os
print (os.environ['MYVAR'])
os.environ['MYVAR'] = "new_val"
print (os.environ['MYVAR'])

输出

$ ./myvar.py 
old_val
new_val
$ echo $MYVAR
old_val

如您所见,输出的最后一行仍然显示old_val

推荐答案

简称:

python脚本更改其环境。但是,这不会影响父进程(外壳)的环境

长版本:

这是一个众所周知的问题,但非常令人困惑。

您必须知道的是,没有环境,每个进程都有自己的环境。

因此,在上面的示例中,外壳(在其中输入代码)只有一个环境。 当您调用./myvar.py时,将创建当前环境的副本并将其传递给您的python脚本。 您的代码"仅"更改了该环境的副本。 一旦完成了Python脚本,这个副本就会被销毁,并且外壳程序将看到其初始的未修改环境。

大多数操作系统(Windows、Linux、MS-DOS等)都是如此

换句话说:任何子进程都不能更改调用它的进程的环境。

在bash中有一个诀窍,您可以获取脚本,而不是将其作为进程调用。

但是,如果您的python脚本启动了另一个进程(例如/bin/bash),则子进程将看到修改后的环境。

这篇关于Python:环境变量未更新的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆