最近在写一个可以自动更换 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, sysdef 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.xctypes.windll.shell32.ShellExecuteW(None, u"runas", unicode(sys.executable), unicode(__file__), None, 1)
以上代码运行时先判断是否拥有管理员权限,如果没有,则调用那个函数获取权限以后再运行一次代码,所以如果在命令行中运行的话,会再弹出一个小黑框。而且根据原博客,这个不能在 IDE 中运行,但是我没有 IDE ,所以没有进行测试。
有的人可能使用上面的 2 和 3 方法发现不会弹出授权弹框,这可能是因为系统的 UAC 被关掉了,按照以下步骤开启:
- win + R,在运行框里输入
msconfig
. - 点击 工具,然后点击 更改UAC设置,再点击 右下方的启动.
- 将通知调整到 始终通知.
这里也有图文教程:win10系统如何开启UAC
---------------------
作者:MemoryD
来源:CSDN
原文:https://blog.csdn.net/MemoryD/article/details/83148305
版权声明:本文为作者原创文章,转载请附上博文链接!
内容解析By:CSDN,CNBLOG博客文章一键转载插件