从Python脚本更改环境变量

时间:2014-11-05 11:15:00

标签: python windows python-3.x windows-7-x64 python-3.4

我编写了一个脚本,用于检查路径中的目录并删除无法访问的目录。我还使用片段以管理员身份运行我的脚本。但是当我在脚本执行后检查我的路径时 - 它都是一样的。

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脚本实际更改环境变量?

1 个答案:

答案 0 :(得分:0)

根据documentation,按照您的方式设置环境变量调用os.putenv(),但此功能的描述不清楚。事实上,据说如下:

  

这种对环境的更改会影响从os.system(),popen()或fork()和execv()开始的子进程。

所以我不确定os.environ是否符合你的期望。 the following question在某种程度上证实了这一点,其中答案仅表示此更改会影响进程......