6
只需將它設置爲一個新值就可以改變當前進程嗎?可以在應用程序中動態設置os.environ ['PYTHONHASHSEED']嗎?
os.environ['PYTHONHASHSEED'] = 'random'
只需將它設置爲一個新值就可以改變當前進程嗎?可以在應用程序中動態設置os.environ ['PYTHONHASHSEED']嗎?
os.environ['PYTHONHASHSEED'] = 'random'
這取決於你的意思。
如果你的意思是要改變目前的解釋比答案的行爲是沒有:
修改os.environ
是不可靠的,因爲在一些操作系統不能修改環境(見文檔爲os.environ
)。
當啓動解釋器時,僅檢查環境變量,因此,以後更改它們不會對當前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),在那裏泄漏內存。所以修改環境是你想要儘可能避免的。
通過使用'subprocess.call',您可以通過傳遞一個明確的增強環境來解決修改環境的問題。 'e = dict(os.environ); e.update(PYTHONHASHSEED = '隨機'); subprocess.call([...],env = e)' – chepner 2014-09-05 13:45:19
@chepner是的,我很清楚。這在文檔中明確提到。我正在回答有關*修改當前進程*的環境*的問題。事實上,答案的一部分是猜測OP的含義。如果他編輯他的問題,澄清他的意思,我會添加這個建議(當我第一次寫答案時,這已經在我的想法中了)。 – Bakuriu 2014-09-05 14:13:47