最近在写一个可以自动更换 hosts 的 python 脚本,但是操作 hosts 需要管理员权限 ,所以就想着要怎么获取。
总结了一下,有三种方法可以获取,下面分别介绍一下。
这个方法很简单,也无需多说,右键以管理员运行就可以了,然后在里面运行 python 脚本就有管理员权限了。
假设我要运行的文件是 test.py
,则我可以写一个 cmd 脚本,不妨叫做 go.cmd
,在里面写入:
@echo off
%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit
cd /d "%~dp0"
start python test.py
保存,与 test.py
放在同一文件夹,双击 go.cmd
运行,会弹出提示,点击“是”就会以管理员运行 test.py
了。
以上两种方法都能用,但是总觉得不够优雅,所以接下来我找到了一种可以直接用 python 代码直接获取管理员权限的方法,可以说是相当优雅了。
以下代码来源:python如果获取windows管理员权限(一)
from __future__ import print_function
import ctypes, sys
def is_admin():
try:
return ctypes.windll.shell32.IsUserAnAdmin()
except:
return False
if is_admin():
# 将要运行的代码加到这里
else:
if sys.version_info[0] == 3:
ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, __file__, None, 1)
else:#in python2.x
ctypes.windll.shell32.ShellExecuteW(None, u"runas", unicode(sys.executable), unicode(__file__), None, 1)
以上代码运行时先判断是否拥有管理员权限,如果没有,则调用那个函数获取权限以后再运行一次代码,所以如果在命令行中运行的话,会再弹出一个小黑框。而且根据原博客,这个不能在 IDE 中运行,但是我没有 IDE ,所以没有进行测试。
有的人可能使用上面的 2 和 3 方法发现不会弹出授权弹框,这可能是因为系统的 UAC 被关掉了,按照以下步骤开启:
msconfig
.这里也有图文教程:win10系统如何开启UAC