python获取并修改Windows环境变量

目录

1、获取环境变量

2、临时添加环境变量

3、永久添加环境变量


环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数,如:临时文件夹位置和系统文件夹位置等。

环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息。环境变量的作用是,在调用指定程序的时候,先在系统默认的目录下查找,如果没有,就在环境变量中去找,环境变量中也没有的话,程序就给出提示。

在Python中,可以使用os模块来获取和修改Windows环境变量。

1、获取环境变量

要获取环境变量的值,可以使用os.environ字典。例如,要获取PATH环境变量的值,可以使用以下代码:

import os

path = os.environ['PATH']
print(path)


2、临时添加环境变量

可以使用os.environ字典。例如,要将PATH环境变量的值添加到现有值的末尾,可以使用以下代码:

import os

new_path = r'C:\Users\xxx\Desktop\test'
os.environ['PATH'] += os.pathsep + new_path

3、永久添加环境变量

通过调整注册表来设置环境变量。

from os import system, environ
import win32con
from win32gui import SendMessage
from winreg import (
    CloseKey, OpenKey, QueryValueEx, SetValueEx,
    HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE,
    KEY_ALL_ACCESS, KEY_READ, REG_EXPAND_SZ, REG_SZ
)

def env_keys(user=True):
    if user:
        root = HKEY_CURRENT_USER
        subkey = 'Environment'
    else:
        root = HKEY_LOCAL_MACHINE
        subkey = r'SYSTEM\CurrentControlSet\Control\Session Manager\Environment'
    return root, subkey

def get_env(name, user=True):
    root, subkey = env_keys(user)
    key = OpenKey(root, subkey, 0, KEY_READ)
    try:
        value, _ = QueryValueEx(key, name)
    except WindowsError:
        return ''
    return value

def set_env(name, value):
    key = OpenKey(HKEY_CURRENT_USER, 'Environment', 0, KEY_ALL_ACCESS)
    SetValueEx(key, name, 0, REG_EXPAND_SZ, value)
    CloseKey(key)
    SendMessage(
        win32con.HWND_BROADCAST, win32con.WM_SETTINGCHANGE, 0, 'Environment')

def remove(paths, value):
    while value in paths:
        paths.remove(value)

def unique(paths):
    unique = []
    for value in paths:
        if value not in unique:
            unique.append(value)
    return unique

def prepend_env(name, values):
    for value in values:
        paths = get_env(name).split(';')
        remove(paths, '')
        paths = unique(paths)
        remove(paths, value)
        paths.insert(0, value)
        set_env(name, ';'.join(paths))

def prepend_env_pathext(values):
    prepend_env('PathExt_User', values)
    pathext = ';'.join([
        get_env('PathExt_User'),
        get_env('PathExt', user=False)
    ])
    set_env('PathExt', pathext)


set_env('Home', '%HomeDrive%%HomePath%')
set_env('Docs', '%HomeDrive%%HomePath%\docs')
set_env('Prompt', '$P$_$G$S')

prepend_env('Path', [
    r'C:\Users\xxx\Desktop\test', # Add cygwin binaries to path
])

# allow running of these filetypes without having to type the extension
prepend_env_pathext(['.lnk', '.exe.lnk', '.py'])

你可能感兴趣的:(python,windows,开发语言)