python 执行需要管理员权限的命令(Windows)
由于Windows存在管理员权限限制,执行需管理员权限的命令时会出错,
有两种方案,
1.采用python调用vbs文件,vbs调用bat文件
2.采用提供弹出用户管理员权限方式让用户确认
1.采用python调用vbs文件,vbs调用bat文件
vbs文件
cwd = CreateObject("Scripting.FileSystemObject").GetFile(Wscript.ScriptFullName).ParentFolder.Path
path = cwd & "\cmd.bat"
Set shell = CreateObject("Shell.Application")
shell.ShellExecute path,"","","runas",0 ' 0代表不显示cmd命令窗口,1代表显示cmd命令行1窗口
WScript.Quit
详细vbs 执行见此处:vbs ShellExecute命令
bat文件
bat一般为空,主要为执行python时自动写入
python文件
import os
import subprocess
CMD_BAT = os.path.join(os.path.dirname(__file__), "cmd.bat")
VBS_PATH = os.path.join(os.path.dirname(__file__), "shell.vbs")
def runAdmin(cmd):
"""
exec command with administrator
:param: cmd: command requiring administrator
"""
try:
# 将命令写入bat文件
with open(CMD_BAT, "w") as f:
f.write(cmd)
# 执行vbs文件
vbs_command = "wscript {}".format(VBS_PATH)
print(f"vbs_command:{vbs_command}")
sp = subprocess.Popen(
vbs_command,
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE
)
print("[PID]: %s[cmd]: %s" % (sp.pid, cmd))
except Exception as e:
print(f"exec vbs fail:{e}")
if __name__ == "__main__":
command = "@powershell -NoProfile -ExecutionPolicy Bypass -Command \"iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))\" && SET PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\\bin\nchoco install virtualbox -y\n"
runAdmin(command)
2.采用提供弹出用户管理员权限方式让用户确认
直接将runAdminCmdDecorator装饰在需要管理员权限执行的函数上即可
import os, sys, ctypes
from win32comext.shell.shell import ShellExecuteEx
from functools import wraps
def is_user_admin():
"""
检查admin
"""
return ctypes.windll.shell32.IsUserAnAdmin()
def run_as_admin():
"""
弹出管理员运行弹窗
"""
script = os.path.abspath(sys.argv[0])
print(f"script:{script}")
args = ' '.join(sys.argv[1:]) if len(sys.argv) > 1 else ''
ShellExecuteEx(lpFile=sys.executable, lpParameters=f"{script} {args}",
nShow=1, lpVerb='runas')
return
def runAdminCmdDecorator(func):
@wraps(func)
def inner(*args, **kwargs):
if not is_user_admin():
run_as_admin()
else:
func(*args, **kwargs)
return inner
python 执行需要管理员权限的命令(Windows)的更多相关文章
- windows7安装phpnow Apache非管理员权限不能操作Windows NT服务的解决方法
科普一下:PHPnow 是什么? Win32 下绿色免费的 Apache + PHP + MySQL 环境套件包.简易安装.快速搭建支持虚拟主机的 PHP 环境,可以安装 Discuz! ...
- python执行linux和window的命令
linux: python执行shell脚本常用的方法 import os val=os.system("shell语句") >>> val=os.system ...
- Win7在CMD命令行中使用管理员权限运行命令
使用命令: runas /user:administrator 需要执行的命令 如下:
- Inno Setup 打包的文件以管理员权限执行
最近发现一个问题,就是Inno Setup打包的程序安装完毕后执行需求管理员权限的程序的时候会失败( inno createprocess 须要提升),解决问题的最简单办法就是打包的后的程序也以管 ...
- Windows 之 获取管理员权限
新建文本文档,写入如下内容: Windows Registry Editor Version 5.00 [-HKEY_CLASSES_ROOT\*\shell\runas] [HKEY_CLASSES ...
- Win10右键添加获取管理员权限
在win10中,还是和WIN7/8一样很多文件被设置权限我们打不开,但很多时候我们还是要打开这些文件夹的,尤其是数据恢复和电脑维护优化时.于是乎我们就有必要获取管理员权限.本人隆重退出完美解决方法. ...
- Win右键管理员权限的获取
Windows Registry Editor Version 5.00 ;取得文件修改权限 [HKEY_CLASSES_ROOT\*\shell\runas] @="管理员权限" ...
- windows中命令行窗口提权到管理员权限.windows 的 sudo
命令行环境中获取管理员权限 第一种方法 (最爽,但是被运行的命令会被当成新进程运行,运行完成后就自动关闭了.) 把以下代码复制到记事本中保存为sudo.vbs 然后移动到PATH任意目录中,如wind ...
- 请使用管理员权限执行pip install命令
重要的事情说三遍! 请使用管理员权限执行pip install命令 请使用管理员权限执行pip install命令 请使用管理员权限执行pip install命令 踩坑记录 当时一切还是从一题Misc ...
随机推荐
- 基于 range 的 for 循环和 auto
基于 range 的 for 循环和 auto C++11 引入一种循环的新形式,叫基于 range 的 for 循环,它允许我们用更简单易读的形式遍历容器中的所有元素 vector<int&g ...
- 一图详解java-class类文件原理
摘要:徒手制作一张超大的类文件解析图,方便通过浏览这个图能马上回忆起class文件的结构以及内部的指令. 本文分享自华为云社区<[读书会第十二期]这可能是全网"最大".&qu ...
- TKE qGPU 通过 CRD 管理集群 GPU 卡资源
作者 刘旭,腾讯云高级工程师,专注容器云原生领域,有多年大规模 Kubernetes 集群管理经验,现负责腾讯云 GPU 容器的研发工作. 背景 目前 TKE 已提供基于 qGPU 的算力/显存强隔离 ...
- SQLServer2008中的Merge
SqlServer2008 + 中的 Merge Merge: 合并 融合 SqlServer2008 中的Merge 用于匹配两种表中的数据,根据源表和目标表中的数据的比较结果对目标表进行对 ...
- 《Unix 网络编程》11:名字和地址转换
名字和地址转换 系列文章导航:<Unix 网络编程>笔记 域名系统 简介 域名系统主要用于主机名字和 IP 地址之间的映射.主机名可以是: 简单名字,如:centos01 全限定域名(FQ ...
- JOISC2020 题解
Day1T1 建筑装饰4 题目链接:Day1T1 建筑装饰4 Solution 我们先考虑朴素的\(dp\)方法: 设\(dp_{i,j,k}\)表示前\(i\)个数中,选了\(j\)个\(B\)数组 ...
- docker安装nginx,配置SSL
nginx安装 下载镜像并测试 1.docker pull nginx 2.docker images nginx 查看我们拉取到本地的nginx镜像IMAGE ID 3.首先测试下nginx镜像是否 ...
- 即时通讯IM,是时代进步的逆流?看看JNPF怎么说
JNPF快速开发平台所包含的第四个重要的开发框架是即时通讯沟通工具.即时沟通工具的目的是让各大企事业单位在各种业务工作流程环境下实现实时无缝协同办公,打破信息数据孤岛,形成高效的层级流转审批和各流程环 ...
- 1. Docker的中央仓库安装设置及镜像的操作
具体也可参考:https://developer.aliyun.com/mirror/docker-ce?spm=a2c6h.13651102.0.0.3e221b11G7cfhr https://d ...
- 五分钟搞懂POM设计模式
转载请注明出处️ 作者:IT小学生蔡坨坨 原文链接:五分钟搞懂POM设计模式 大家好,我是IT小学生蔡坨坨. 今天,我们来聊聊Web UI自动化测试中的POM设计模式. 为什么要用POM设计模式 前期 ...