2014-11-05 160 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确认,其中答案只表示进程将受此更改影响...