Windows下如何以管理员权限运行Python脚本并解决相关报错
Windows下Python脚本获取管理员权限运行的可行方案
两段测试代码的报错原因
- 第一段admin相关代码报错:导入的
admin模块要么未安装对应第三方包,要么安装了同名无关包,不存在isUserAdmin方法,且该第三方包维护极差,不推荐使用。 - 第二段win32com代码报错:首先未安装
pywin32依赖,其次代码存在逻辑问题:sys.exit(0)写在打印语句前,即使提权成功也不会执行后续逻辑,另外参数拼接未处理带空格的路径,大概率启动失败。
可直接落地的实现方案
方案1:零代码手动提权
- 直接右键点击待运行的Python脚本/启动终端,选择「以管理员身份运行」即可,无需修改代码。
- 如果通过命令行启动,先打开管理员权限的终端,再在终端内执行
python 你的脚本文件名.py即可。
方案2:原生ctypes自动提权(无额外依赖,稳定性最高)
无需安装任何第三方包,直接调用Windows系统自带接口实现,无导入报错风险,复制即可使用:
import ctypes import sys import os def is_admin(): try: return ctypes.windll.shell32.IsUserAnAdmin() except: return False if not is_admin(): # 自动唤起UAC提权流程,重启当前脚本 ctypes.windll.shell32.ShellExecuteW( None, "runas", sys.executable, " ".join([f'"{os.path.abspath(sys.argv[0])}"'] + [f'"{param}"' for param in sys.argv[1:]]), None, 1 ) sys.exit(0) # -------------------------- # 下方编写Metin2辅助脚本的业务逻辑,代码运行到此处时已持有管理员权限 print("已获取管理员权限,脚本正常运行") # --------------------------
方案3:修复后的win32com版本
如果要使用win32com实现,先在终端执行命令安装依赖:pip install pywin32
依赖安装完成后使用以下修正版代码,已修复路径空格解析、执行顺序错误的问题:
import os import sys import win32com.shell.shell as shell ASADMIN = 'asadmin' if sys.argv[-1] != ASADMIN: script_path = os.path.abspath(sys.argv[0]) params = ' '.join([f'"{script_path}"'] + [f'"{arg}"' for arg in sys.argv[1:]] + [ASADMIN]) shell.ShellExecuteEx(lpVerb='runas', lpFile=sys.executable, lpParameters=params) sys.exit(0) # 提权成功后的业务逻辑编写在此处 print("已获取管理员权限,脚本正常运行")
注意:提权时系统会弹出UAC确认窗口,点击「是」即可完成提权;如果开启了UAC最高拦截等级,手动确认即可。
内容的提问来源于stack exchange,提问作者Eren
相关产品推荐
相关产品推荐

