簡體   English   中英

Python:環境變量未更新

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM