最近在寫一個可以自動更換 hosts 的 python 腳本,但是操作 hosts 需要管理員權限 ,所以就想着要怎麼獲取。
總結了一下,有三種方法可以獲取,下面分別介紹一下。
1. 以管理員運行 cmd
這個方法很簡單,也無需多說,右鍵以管理員運行就可以了,然後在裏面運行 python 腳本就有管理員權限了。
2. 用 cmd 腳本獲取
假設我要運行的文件是 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
了。
3. 用 python 代碼獲取
以上兩種方法都能用,但是總覺得不夠優雅,所以接下來我找到了一種可以直接用 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 ,所以沒有進行測試。
4. 不彈出UAC解決方法
有的人可能使用上面的 2 和 3 方法發現不會彈出授權彈框,這可能是因爲系統的 UAC 被關掉了,按照以下步驟開啓:
- win + R,在運行框裏輸入
msconfig
. - 點擊 工具,然後點擊 更改UAC設置,再點擊 右下方的啓動.
- 將通知調整到 始終通知.
這裏也有圖文教程:win10系統如何開啓UAC