python修改环境变量_如何从Python修改Windows环境变量的接口?

使用SETX,在调用SETX之前:user PATH == u

machine PATH == m

%PATH% == m;u

> setx PATH %PATH%;new

Calling setx sets the USER path by default, hence now:

user PATH == m;u;new

machine PATH == m

%PATH% == m;m;u;new

每次调用SETX来附加到PATH时,系统路径不可避免地会在%PATH%环境变量中重复。这些更改是永久性的,不会通过重新启动而重置。

通过调整注册表来设置环境变量的解决方案如下: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'%SystemDrive%\cygwin\bin', # Add cygwin binaries to path

r'%HomeDrive%%HomePath%\bin', # shortcuts and 'pass-through' bat files

r'%HomeDrive%%HomePath%\docs\bin\mswin', # copies of standalone executables

])

# allow running of these filetypes without having to type the extension

prepend_env_pathext(['.lnk', '.exe.lnk', '.py'])

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值