免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: cciikk
打印 上一主题 下一主题

获得系统的path变量,被"'搞糊涂了....大虾来指点下 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2009-10-16 08:21 |只看该作者
原帖由 bleem1998 于 2009-10-15 23:06 发表
友情提醒
如果你是想得到系统的PATH
这样做更简单

import os
os.environ['PATH']

嗯,想获的输出就popen,system只是执行下,一般返回0或者其他值表示执行是否成功。
最新的Py版本建议使用subprocess模块

论坛徽章:
0
12 [报告]
发表于 2009-10-16 12:31 |只看该作者
进一步完成了读取path值存住,将path值写0,将存住的path值写回去

大家看看这样能实现不重启Windows,让环境变量刷新生效么?

import os


x=os.popen('wmic ENVIRONMENT where "name=\'path\' and username=\'<system>\'" get VariableValue').read()
x = x.split('VariableValue')[1]
x = x.strip().split(';')
x = ";".join(x)
print x



os.popen('wmic ENVIRONMENT where "name=\'path\' and username=\'<system>\'" set VariableValue="0" ')
y=os.popen('wmic ENVIRONMENT where "name=\'path\' and username=\'<system>\'" get VariableValue').read()
print y


t='wmic ENVIRONMENT where "name=\'path\' and username=\'<system>\'" set VariableValue=\"%s\"' %(x)


print t


os.popen(t)
z=os.popen('wmic ENVIRONMENT where "name=\'path\' and username=\'<system>\'" get VariableValue').read()
print z


[ 本帖最后由 cciikk 于 2009-10-16 12:41 编辑 ]

论坛徽章:
0
13 [报告]
发表于 2009-10-16 12:47 |只看该作者
比较郁闷的是这样子用os.popen(t) 把之前的值写回去的时候 wmic都会把
%CommonProgramFiles%  这样的写成解析后的C:\Program Files\Common Files

请问这个怎么避免呢?  貌似是wmic的问题了

[ 本帖最后由 cciikk 于 2009-10-16 13:05 编辑 ]

论坛徽章:
0
14 [报告]
发表于 2009-10-16 13:35 |只看该作者
原帖由 cciikk 于 2009-10-16 12:47 发表
比较郁闷的是这样子用os.popen(t) 把之前的值写回去的时候 wmic都会把
%CommonProgramFiles%  这样的写成解析后的C:\Program Files\Common Files

请问这个怎么避免呢?  貌似是wmic的问题了


%CommonProgramFiles%其实是一个环境变量
用os.environ['CommonProgramFiles']可以查到
所以如果你喜欢你可以自己定义一个变量叫%ChinaUnix%用起来也跟%CommonProgramFiles%差不多
wmic查出来的path变量应该是自动翻译过的
所以如果想再使用%CommonProgramFiles%就得翻译回去
超级麻烦
最简单的办法是直接读注册表
这些环境变量都保存在注册表里
比如[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Environment]
但貌似保存在好几个地方
具体的可以自己查查

BTW
你买的那个软件真够烂的
把系统的PATH都改变了
那系统可怎么使用啊。。。。

论坛徽章:
0
15 [报告]
发表于 2009-10-16 19:29 |只看该作者
原帖由 bleem1998 于 2009-10-16 13:35 发表


%CommonProgramFiles%其实是一个环境变量
用os.environ['CommonProgramFiles']可以查到
所以如果你喜欢你可以自己定义一个变量叫%ChinaUnix%用起来也跟%CommonProgramFiles%差不多
wmic查出来的path变量 ...



读出来好办,关键是要写回去,再让系统重新加载一遍环境变量. .......

通过注册表修改的环境变量貌似要重启Windows才能被系统加载


这个wmic写进去的貌似不用重启Windows就能被系统加载

[ 本帖最后由 cciikk 于 2009-10-16 19:31 编辑 ]

论坛徽章:
0
16 [报告]
发表于 2009-10-17 04:45 |只看该作者
可以用windows的API来搞定

  1. import win32gui,win32con
  2. #修改完注册表后调用下面这句,立刻就让环境变量生效
  3. win32gui.SendMessageTimeout(win32con.HWND_BROADCAST,win32con.WM_SETTINGCHANGE,0,'Environment',win32con.SMTO_ABORTIFHUNG,5000)
复制代码

论坛徽章:
0
17 [报告]
发表于 2009-10-17 07:55 |只看该作者
原帖由 bleem1998 于 2009-10-17 04:45 发表
可以用windows的API来搞定

import win32gui,win32con
#修改完注册表后调用下面这句,立刻就让环境变量生效
win32gui.SendMessageTimeout(win32con.HWND_BROADCAST,win32con.WM_SETTINGCHANGE,0,'Environme ...



这么说直接调用这句的话也能让环境变量刷新一次重新生效?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP