我正在尝试覆盖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脚本更改其环境。但是,这不会影响父进程(shell)的环境。
长版:
好吧,这是一个众所周知的问题,但很令人困惑。
您需要知道的是,没有环境,每个进程都有自己的环境。
因此,在上面的示例中,外壳程序(您在其中键入代码)具有一个环境。调用时./myvar.py
,将创建当前环境的副本并将其传递到python脚本。您的代码“仅”更改此环境副本。python脚本完成后,此副本将被销毁,并且外壳程序将看到其最初的未修改环境。
对于大多数操作系统(Windows,Linux,MS-DOS等),都是如此。
换句话说:没有任何子进程可以更改称为它的进程的环境。
在bash中,有一个窍门,您在其中采购脚本而不是将其称为进程。
但是,如果您的python脚本启动了另一个进程(例如/bin/bash
),则子进程将看到修改后的环境。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句