2011-05-09 103 views
0

我有其中1個處理設置一個值作爲環境變量的要求和予讀取使用得到改變環境變量在Python

os.environ

作爲每蟒文檔在Python該值:

該映射捕獲的第一 時間os模塊被導入, 通常的Python啓動期間作爲 處理site.py的一部分。直接修改 os.environ所做的更改除外,在此時間後 之後對環境所做的更改不會反映在os.environ, 中。

我的問題是進程設置/每次調用python腳本時更改變量。
請告訴我一種閱讀更改值的方法。

感謝,

回答

3

我想你可以使用os.getenv()得到一個環境變量的值任何時候,這將反映最先進的最新狀態。

更新:請注意,不存在一個「全局」環境,至少在Linux上不存在。引用維基百科:

在所有類Unix系統中,每個進程都有自己的一組環境變量。默認情況下,創建進程時,它會繼承其父進程的重複環境,除非父進程在創建子進程時進行明確更改。

因此,如果從相同的父進程(如bash)啓動(叉)兩個過程,並且在處理中的一個改變的環境變量,其它過程將不會看到它,因爲它使用另一種父進程環境的副本。同樣,如果您在啓動子進程後更改父進程中的環境,那麼子進程將看不到更改,因爲它們已經創建了其環境的私有副本。

+0

無法正常工作。我得到相同的舊值。 – shashuec 2011-05-09 10:46:32

+0

好的。問題在於,沒有像所有流程都看到的「全球」環境那樣的東西。看到我上面的更新。 – 2011-05-09 11:29:36

+0

aah..got it ..謝謝... – shashuec 2011-05-09 11:33:59

1

如果你的進程設置/更新了一個環境變量,然後調用Python腳本,你會在你的Python腳本中看到更新後的值。但是,如果這些是並行進程並且在Python腳本運行時環境變量被修改,那麼在Python腳本中不會看到對environemnt變量的更新。

+0

我有第二種情況。有沒有辦法獲得更新的值? – shashuec 2011-05-09 10:46:15

+0

@Shashwat正如我所看到的,您需要某種形式的IPC來生成Python腳本以進行通信(對Python腳本)修改。 – sateesh 2011-05-09 10:56:41