[英]Python: Environment Variables not updating
我正在嘗試覆蓋 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 腳本完成,這個副本就會被銷毀,shell 將看到它的初始未修改環境。
這適用於大多數操作系統(Windows、Linux、MS-DOS 等)
換句話說:沒有子進程可以改變調用它的進程的環境。
在 bash 中有一個技巧,您可以在其中獲取腳本而不是將其作為進程調用。
但是,如果您的 python 腳本啟動另一個進程(例如/bin/bash
),則子進程將看到修改后的環境。
您啟動了一個改變其環境並退出的新進程。 真的就是這樣。
您不應該期望這會影響您從(您的外殼)啟動它的過程。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.