2014-11-05 214 views
3

我編寫了一個腳本,用於檢查來自Path的目錄並刪除無法訪問的目錄。我還用snippet作爲管理員運行我的腳本。但是當我在腳本執行後檢查我的路徑時 - 它們都是一樣的。從Python腳本更改環境變量

import os 
import sys 
import win32com.shell.shell as shell 

if __name__ == "__main__": 

    if os.name != 'nt': 
     raise RuntimeError("This script is implemented only for Windows") 

    ASADMIN = 'asadmin' 

    if sys.argv[-1] != ASADMIN: 
     script = os.path.abspath(sys.argv[0]) 
     params = ' '.join([script] + sys.argv[1:] + [ASADMIN]) 
     shell.ShellExecuteEx(lpVerb='runas', lpFile=sys.executable, lpParameters=params) 
     print("I am root now") 

    paths = os.environ.get('Path').split(';') 
    accessible_paths = [] 
    for path in paths: 
     if os.access(path, os.R_OK): 
      accessible_paths.append(path) 

    new_path = ';'.join(accessible_paths) 
    os.environ['Path'] = new_path 

    print(new_path) 
    print(new_path == os.environ['Path']) 

那麼我怎樣才能真正改變環境變量的Python腳本?

+0

初始系統環境變量由會話管理器(smss.exe)從註冊表項HKLM \ System \ CurrentControlSet \ Control \ Session Manager \ Environment'。 winlogon.exe還會合並從用戶的HKCU \ Environment'鍵加載的每個用戶'PATH'。 – eryksun 2015-01-19 08:24:58

回答

0

根據documentation,設置環境變量的方式你調用os.putenv(),但是這個函數的描述不清楚。的確如下所述:

這樣的環境變化會影響以os.system(),popen()或fork()和execv()開頭的子進程。

所以我不確定os.environ是專門用來做你期望的。這有點被the following question確認,其中答案只表示進程將受此更改影響...