Python:环境变量未更新

时间:2020-02-22 16:39:45

标签: python shell environment-variables

我正在尝试覆盖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

2 个答案:

答案 0 :(得分:5)

简短版本:

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

长版:

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

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

因此,在上面的示例中,shell(您在其中键入代码)具有一个环境。 调用./myvar.py时,将创建当前环境的副本并将其传递到python脚本。 您的代码“仅”更改此环境副本。 python脚本完成后,此副本将被销毁,并且外壳程序将看到其初始的未修改环境。

对于大多数操作系统(Windows,Linux,MS-DOS等),这都是正确的

换句话说:没有子进程可以更改称为它的进程的环境。

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

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

答案 1 :(得分:2)

您启动了一个新进程,该进程更改了环境并退出。真的是全部。

您不应指望这会影响从(您的Shell)启动它的过程。