想给python 提个权,要怎么操作?

2012-05-28 10:52:21 +08:00
 kojp
因为,要测试一些东西。需要频繁改HOSTS。一直就想弄个脚本来实现~~~~,今天努力了。
但是未遂:-(


这招行不通。说权限不够
dest_dir="C:\\WINDOWS\\system32\\drivers\\etc\\hosts"
f=open("dest_dir","a+")
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

file_path = "C:\\WINDOWS\\system32\\drivers\\etc\\hostsnew"
os.remove(dest_dir)
aa='C:\\WINDOWS\\system32\\drivers\\etc\\hosts'
os.copy(file_path,dest_dir)

这招也行不通,直接不给提示,只说错误


PS:系统xp
4384 次点击
所在节点    Python
23 条回复
CoX
2012-05-28 10:55:57 +08:00
下下策,直接把用户加为管理员吧:)
ayang23
2012-05-28 11:02:44 +08:00
使用runas,或者sysinternal工具包里的psexec.exe,使用管理员账户运行你的python命令。
treo
2012-05-28 11:03:52 +08:00
如果你有system权限的话,直接修改hosts的权限,给相应用户modify权限不就行了
dongbeta
2012-05-28 11:11:11 +08:00
试试 gearman,提权好工具
kojp
2012-05-28 12:24:19 +08:00
@treo
@CoX

Win下的权限也需要这么复杂吗 ?
我用 的是 Administrator用户 已经有权限直接改 hosts了 ,只是想用脚本来实现 ,会更方便些 . :-(


@ayang23
一会儿试试你的法子
c
2012-05-28 12:45:05 +08:00
修改host权限为everyone
CoX
2012-05-28 12:48:32 +08:00
@kojp 好吧,我本地试了试,没有问题。
难道是默认的只读属性你没手动去掉?
9hills
2012-05-28 12:48:59 +08:00
@kojp win下的权限比Linux复杂多了。。

尤其是win下的Administrator并不是系统最高权限,所以还得依赖dirty hack来做一些事情。。。
Linux下只需要以root权限运行脚本,就可以干任何事情
ljbha007
2012-05-28 12:54:31 +08:00
直接用管理员身份打开python解释器或者管理员身份打开命令行然后运行python解释器就好了
kojp
2012-05-28 14:03:54 +08:00
@c
谢谢 ,你的思路很 ok! 我是用手机在上 ,但能确定这条路是能行的通的 !

But,适用性怎么解决 ?
我是要在内多好多机器上执行这个脚本. :-(
allenm
2012-05-28 14:09:19 +08:00
我也正在写一个应用,和LZ需求类似,我在 XP 下直接是 open(host,'w') 这样打开的,然后直接写入,貌似没遇到权限问题,代码在此:https://github.com/allenm/sync-hosts/blob/master/client/libs/writehosts.py
Weakdancer
2012-05-28 15:15:57 +08:00
我有个需求也和楼主类似。在win7下,就算是普通用户,安装软件时系统会提醒用户是否放权。
就是这个请求放权,我一直搞不清楚是怎么触发的。
c
2012-05-28 15:17:43 +08:00
如果你是管理员,调用命令修改
Weakdancer
2012-05-28 15:31:54 +08:00
kojp
2012-05-28 15:52:18 +08:00
@Weakdancer 你的问题,只要下载一个软件应该不可以解决了。好像就叫 一键获取权限。这是跟WIN7的特例吧。


@allenm

谢了,我试试看
@c 什么命令?
@CoX 谢谢测试;这个,我也得试试。但会存在和"修改host权限为everyone"一样的蔽端
c
2012-05-28 16:17:32 +08:00
@kojp

F:\>icacls c:\Windows\System32\drivers\etc\HOSTS /grant Everyone:F
已处理的文件: c:\Windows\System32\drivers\etc\HOSTS
已成功处理 1 个文件; 处理 0 个文件时失败
CoX
2012-05-28 17:30:17 +08:00
@kojp 我的是域的账户,没有给everyone的权限
kojp
2012-05-29 09:52:58 +08:00
我是那种慢热性的,今天继续折腾这个问题。
@allenm
看了一下代码
这行你漏写了一个 (cont哟,呵呵)def writeHost( hosts ):
本地运行依旧是个权限问题。哈哈,可能系统环境不一样。
allenm
2012-05-29 09:55:55 +08:00
@kojp THX , 这个之前是写的 writeHostCont ,然后后来觉得有点长,就把 cont 去掉了,但是最后面的测试调用代码还没去掉,因为后来都是在其他地方调用这个了,呵呵。我去改掉。
kojp
2012-05-29 10:00:29 +08:00
谢谢以上各位!
@CoX 只读去掉,一切就正常了!哈哈~~~



@c everyone就有点不太安全了,感觉。不过icacls 只在WIN7和VISTA才有吧。XP下的是cacls
命令运行格式好是一样的。成功
cacls c:\windows\system32\drivers\etc\hosts /grant Everyone:F

目前想的办法是。

在python里面调用cacls,修改掉hosts的只读属性。然后按照原来的(也就是 Reply @allenm的那个一路走下去)再往win7/vista里面扩展一下。估计就算是一个成品了。哈哈,到时候传git上~~~

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/37589

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX