2012-09-11 119 views
7

我有一個複雜的軟件,我無法發佈,也沒有具體的工作示例。我會盡力解釋這個問題,也許有人遇到過這個問題。os.getenv返回None而不是正確的值

在Linux shell中我已經定義了一個環境變量:

> export MY_TEST_ENV=4711 
> echo $MY_TEST_ENV 
> 4711 

在複雜的代碼,我想獲得這個變量與

print os.getenv('MY_TEST_ENV') 

它總是返回None。如果我創建一個測試腳本來測試這種行爲,即使使用不同文件中的類,我也會得到所需的行爲(即os.getenv('MY_TEST_ENV')返回正確的值4711)。

代碼以「sudo」開頭。

任何想法可能是什麼原因?

+1

你如何運行這個「複雜的代碼」? – geoffspear

+4

環境變量的其餘部分仍然存在嗎? Python進程如何啓動?如果你用'execve'系統調用啓動一個進程,並且不填寫環境變量,那麼子進程的環境就會被清零。 – alexis

+0

我知道我的問題的解決方案是微不足道的 - 因爲我使用sudo運行python進程!但在我被問及如何運行代碼之前,我還沒有看到這個解決方案。如果沒有sudo,我會看到這個變量(但其餘的代碼將不起作用)。 – Alex

回答

4

很可能您調用Python進程的方式會使您失去環境。如果你在一個正在運行的shell中導出變量,並且在此之後,在同一個shell中調用有問題的Python進程,這個環境變量肯定應該可用於這個Python進程。爲了幫助您調試此問題:代替問題代碼(print os.getenv('my...')),通過print os.environ打印整個環境。從結果你應該能夠推斷你的環境發生了什麼。