[转]Python 获取Windows管理员权限
最近在寫(xiě)一個(gè)可以自動(dòng)更換 hosts 的 python 腳本,但是操作 hosts 需要管理員權(quán)限 ,所以就想著要怎么獲取。
總結(jié)了一下,有三種方法可以獲取,下面分別介紹一下。
1. 以管理員運(yùn)行 cmd
這個(gè)方法很簡(jiǎn)單,也無(wú)需多說(shuō),右鍵以管理員運(yùn)行就可以了,然后在里面運(yùn)行 python 腳本就有管理員權(quán)限了。
2. 用 cmd 腳本獲取
假設(shè)我要運(yùn)行的文件是 test.py,則我可以寫(xiě)一個(gè) cmd 腳本,不妨叫做 go.cmd,在里面寫(xiě)入:
@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 運(yùn)行,會(huì)彈出提示,點(diǎn)擊“是”就會(huì)以管理員運(yùn)行 test.py 了。
3. 用 python 代碼獲取
以上兩種方法都能用,但是總覺(jué)得不夠優(yōu)雅,所以接下來(lái)我找到了一種可以直接用 python 代碼直接獲取管理員權(quán)限的方法,可以說(shuō)是相當(dāng)優(yōu)雅了。
以下代碼來(lái)源:python如果獲取windows管理員權(quán)限(一)
from __future__ import print_function import ctypes, sysdef is_admin():try:return ctypes.windll.shell32.IsUserAnAdmin()except:return False if is_admin():# 將要運(yùn)行的代碼加到這里 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)以上代碼運(yùn)行時(shí)先判斷是否擁有管理員權(quán)限,如果沒(méi)有,則調(diào)用那個(gè)函數(shù)獲取權(quán)限以后再運(yùn)行一次代碼,所以如果在命令行中運(yùn)行的話(huà),會(huì)再?gòu)棾鲆粋€(gè)小黑框。而且根據(jù)原博客,這個(gè)不能在 IDE 中運(yùn)行,但是我沒(méi)有 IDE ,所以沒(méi)有進(jìn)行測(cè)試。
4. 不彈出UAC解決方法
有的人可能使用上面的 2 和 3 方法發(fā)現(xiàn)不會(huì)彈出授權(quán)彈框,這可能是因?yàn)橄到y(tǒng)的 UAC 被關(guān)掉了,按照以下步驟開(kāi)啟:
這里也有圖文教程:win10系統(tǒng)如何開(kāi)啟UAC
---------------------
作者:MemoryD
來(lái)源:CSDN
原文:https://blog.csdn.net/MemoryD/article/details/83148305
版權(quán)聲明:本文為作者原創(chuàng)文章,轉(zhuǎn)載請(qǐng)附上博文鏈接!
內(nèi)容解析By:CSDN,CNBLOG博客文章一鍵轉(zhuǎn)載插件
總結(jié)
以上是生活随笔為你收集整理的[转]Python 获取Windows管理员权限的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 用python来获取Github IP地
- 下一篇: [转]2022 Flutter 宣布发布