#coding=utf8
import os
import sys
from subprocess import check_call
if sys.hexversion > 0x03000000:
import winreg
else:
import _winreg as winreg class Win32Environment:
"""Utility class to get/set windows environment variable"""
def __init__(self, scope):
# assert scope in ('user', 'system')
self.scope = scope
if scope == 'user':
self.root = winreg.HKEY_CURRENT_USER
self.subkey = 'Environment'
else:
self.root = winreg.HKEY_LOCAL_MACHINE
self.subkey = r'SYSTEM\CurrentControlSet\Control\Session Manager\Environment' def getenv(self, name):
key = winreg.OpenKey(self.root, self.subkey, 0, winreg.KEY_READ)
try:
value, _ = winreg.QueryValueEx(key, name)
except WindowsError:
value = ''
return value def setenv(self, name, value):
# Note: for 'system' scope, you must run this as Administrator
key = winreg.OpenKey(self.root, self.subkey, 0, winreg.KEY_ALL_ACCESS)
winreg.SetValueEx(key, name, 0, winreg.REG_EXPAND_SZ, value)
winreg.CloseKey(key)
# For some strange reason, calling SendMessage from the current process
# doesn't propagate environment changes at all.
# TODO: handle CalledProcessError (for assert)
check_call('''\"%s" -c "import win32api, win32con;assert win32api.SendMessage(win32con.HWND_BROADCAST, win32con.WM_SETTINGCHANGE,0, 'Environment')"''' % sys.executable) def get_userenv(self, name):
# Note: for 'system' scope, you must run this as Administrator
key = winreg.OpenKey(self.root, self.subkey, 0, winreg.KEY_ALL_ACCESS)
value,_=winreg.QueryValueEx(key, name)
return value def test_winreg():
# e1 = Win32Environment(scope="system")
# print e1.getenv('PATH')
e2 = Win32Environment(scope="user")
# e2.setenv('JAVA_HOME', os.path.expanduser('C:\\jdk1.8.0_91'))
# e2.setenv('CLASS_PATH', os.path.expanduser('%JAVA_HOME%\\lib;%JAVA_HOME%\\lib\\tools.jar'))
# e2.setenv('PATH', os.path.expanduser('%JAVA_HOME%\\jre\\bin;%JAVA_HOME%\\bin'))
e2.get_userenv("JAVA_HOME") cmd="java version" e1 = Win32Environment(scope="user")
#print e1.get_userenv('JAVA_HOME') if __name__=='__main__':
test_winreg() # if filename and os.path.isfile(filename):
# execfile(filename)

python通过操作windows系统注册表方式修改环境变量的更多相关文章

  1. [转]Windows系统注册表知识完全揭密

    来源:http://www.jb51.net/article/3328.htm Windows注册表是帮助Windows控制硬件.软件.用户环境和Windows界面的一套数据文件,注册表包含在Wind ...

  2. c# .net 编程方式修改环境变量无效的解决办法

    无论是修改注册表方式(System\ControlSet001\Control\Session Manager\Environment"),还是用Environment.SetEnviron ...

  3. WINDOWS系统注册表取得管理权限研究

    有的时候开发我们需要取得系统管理员权限,可以通过修改注册表实现,研究网上的各种方法,整理得一下脚本实现取得管理员权限 脚本如下 Windows Registry Editor Version 5.00 ...

  4. WINDOWS系统注册表(读、写)

    读取注册表 写入注册表

  5. Windows系统 配置Java的JDK环境变量

    安装了JDK或者绿色版后,在系统的环境变量设置中,进行以下配置: 1.新建->变量名"JAVA_HOME",变量值"D:\jdk1.8.0_05"(即JD ...

  6. windows系统Android-sdk的下载与环境变量配置

    最近一段时间在做app的开发,作为前端而言,开发app并不像android工程师那样熟悉android开发:无论是使用cordova.js或者react-native开发都需要配置android开发环 ...

  7. windows系统中,创建临时环境变量

    以servlet-api.jar 包为例 set classpath=%classpath%;C:\apache-tomcat-6.0.37\lib\servlet-api.jar

  8. 怎么利用WinPE恢复系统注册表?

    我们的电脑总是会遇到各种各样的问题,最好用的方式就是电脑重装,重装系统的方式有很多,光盘安装.硬盘安装.U盘安装等.但是碰到电脑系统瘫痪无法启动,甚至连安全模式也进不了的时候,你的光盘.硬盘就没有用处 ...

  9. C# 32位程序访问64位系统注册表

    原文:C# 32位程序访问64位系统注册表 我的上一篇文章已经阐述了“32位程序和64位程序在64位平台上读\写注册表的区别”,那么接下来将要回答上篇所留下来的一个问题:32位程序如何访问64位系统注 ...

随机推荐

  1. selenium 登陆小技巧

    from selenium import webdriver from selenium.webdriver.common.keys import Keys driver = webdriver.Fi ...

  2. 爬虫json数据的处理

    在爬网页的过程中,最喜欢遇到的就是json数据接口,省了不少麻烦,但是json数据也有多种格式. 类型一:标准的json result = json.loads(html.text),将str转成py ...

  3. SIFT算法详解

    尺度不变特征变换匹配算法详解Scale Invariant Feature Transform(SIFT)Just For Fun zdd  zddmail@gmail.com or (zddhub@ ...

  4. 到浏览器顶部的获取js和jquery

    获取当前窗口到页面顶端高度: js: document.documentElement.scrollTop JQ:$(document).scrollTop()或者$(window).scrollTo ...

  5. libevent-2.0.so.5 (安装MEMCACHED问题)

    今天安装memcache启动服务时出现 error while loading shared libraries: libevent-2.0.so.5: cannot open shared obje ...

  6. 面向对象【day07】:面向对象概念介绍(二)

    本节内容 1.概念 2.特性 3.面向对象介绍 一丶概念 1.面向对象编程 OOP(Object-Oriented Programming)编程是利用“类”和“对象”来创建各种模型来实现对真实世界的描 ...

  7. centos6.5环境下安装zk

    第一步:先下载安装包,解压. 第二步:进去根目录,创建data文件夹  mkdir  data 第三步:进去conf文件夹,修改  zoo_sample.cfg    的名字   mv zoo_sam ...

  8. 使用swagger来编写在线api文档

    swagger是一个非常简单,强大的框架.快速上手,只需要引入jar包 , 使用注解就可以生成一个漂亮的在线api文档 pom.xml <dependency> <groupId&g ...

  9. javascript 学习1

    1.javaScript允许对任意数据类型做比较,如boolean与number,false==0//true false === 0//false == 比较:自动转换数据类型进行比较,很多时候得到 ...

  10. Spring MVC 源码分析

      Spring MVC SpringMVC中扮演关键角色的DispatcherServlet类. 1 DispatcherServlet 1.1DispatcherServlet 类图 1.2 初始 ...