2014-09-05 134 views

回答

8

這取決於你的意思。

如果你的意思是要改變目前的解釋比答案的行爲是沒有

  1. 修改os.environ是不可靠的,因爲在一些操作系統不能修改環境(見文檔爲os.environ)。

  2. 當啓動解釋器時,僅檢查環境變量,因此,以後更改它們不會對當前python實例產生任何影響。從the documentation

    這些環境變量影響Python的行爲,他們 命令行之前處理開關以外-E-I

    (這意味着它們僅在啓動解釋程序時檢查,遠在任何用戶代碼運行之前)。

據我所知,隨機哈希種子無法動態設置,讓你有,如果你想激活散列隨機重啓解釋。

如果你的意思是使新工藝由當前解釋催生了行爲與該值設置之前,然後假設你是支持putenv一個平臺上運行。在產生新進程時,默認情況下它會繼承當前進程的環境。您可以使用一個簡單的腳本測試:

#check_environ.py 
import os 
import subprocess 

os.environ['A'] = '1' 
proc = subprocess.call(['python', '-c', 'import os;print(os.environ["A"])']) 

其中產量:

$ python check_environ.py 
1 

注意,存在已知的bug在putenv實現(例如,在Mac OS X),在那裏泄漏內存。所以修改環境是你想要儘可能避免的。

+1

通過使用'subprocess.call',您可以通過傳遞一個明確的增強環境來解決修改環境的問題。 'e = dict(os.environ); e.update(PYTHONHASHSEED = '隨機'); subprocess.call([...],env = e)' – chepner 2014-09-05 13:45:19

+0

@chepner是的,我很清楚。這在文檔中明確提到。我正在回答有關*修改當前進程*的環境*的問題。事實上,答案的一部分是猜測OP的含義。如果他編輯他的問題,澄清他的意思,我會添加這個建議(當我第一次寫答案時,這已經在我的想法中了)。 – Bakuriu 2014-09-05 14:13:47

相關問題