最近在寫一個可以自動更換 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博客文章一鍵轉載插件