从Python脚本更改环境variables

我写了一个脚本来检查Path中的dirs,并删除无法访问的dirs。 另外我用snippet作为pipe理员运行我的脚本。 但是,当我检查脚本执行后,我的path – 都是一样的。

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']) 

那么我怎样才能真正改变环境variables的Python脚本?

根据文档 ,设置环境变量的方式是调用os.putenv() ,但是这个函数的描述不清楚。 的确如下所述:

这样的环境变化会影响以os.system(),popen()或fork()和execv()开始的子进程。

所以我不确定os.environ的设计是否符合你的期望。 下面的问题有点证实了这一点,答案只是表明这个变化会影响进程。