由于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)的更多相关文章

  1. windows7安装phpnow Apache非管理员权限不能操作Windows NT服务的解决方法

    科普一下:PHPnow 是什么?        Win32 下绿色免费的 Apache + PHP + MySQL 环境套件包.简易安装.快速搭建支持虚拟主机的 PHP 环境,可以安装 Discuz! ...

  2. python执行linux和window的命令

    linux: python执行shell脚本常用的方法 import os val=os.system("shell语句")  >>> val=os.system ...

  3. Win7在CMD命令行中使用管理员权限运行命令

    使用命令: runas /user:administrator 需要执行的命令 如下:

  4. Inno Setup 打包的文件以管理员权限执行

    最近发现一个问题,就是Inno Setup打包的程序安装完毕后执行需求管理员权限的程序的时候会失败( inno createprocess   须要提升),解决问题的最简单办法就是打包的后的程序也以管 ...

  5. Windows 之 获取管理员权限

    新建文本文档,写入如下内容: Windows Registry Editor Version 5.00 [-HKEY_CLASSES_ROOT\*\shell\runas] [HKEY_CLASSES ...

  6. Win10右键添加获取管理员权限

    在win10中,还是和WIN7/8一样很多文件被设置权限我们打不开,但很多时候我们还是要打开这些文件夹的,尤其是数据恢复和电脑维护优化时.于是乎我们就有必要获取管理员权限.本人隆重退出完美解决方法. ...

  7. Win右键管理员权限的获取

    Windows Registry Editor Version 5.00 ;取得文件修改权限 [HKEY_CLASSES_ROOT\*\shell\runas] @="管理员权限" ...

  8. windows中命令行窗口提权到管理员权限.windows 的 sudo

    命令行环境中获取管理员权限 第一种方法 (最爽,但是被运行的命令会被当成新进程运行,运行完成后就自动关闭了.) 把以下代码复制到记事本中保存为sudo.vbs 然后移动到PATH任意目录中,如wind ...

  9. 请使用管理员权限执行pip install命令

    重要的事情说三遍! 请使用管理员权限执行pip install命令 请使用管理员权限执行pip install命令 请使用管理员权限执行pip install命令 踩坑记录 当时一切还是从一题Misc ...

随机推荐

  1. Java 16 新特性:record类

    以前我们定义类都是用class关键词,但从Java 16开始,我们将多一个关键词record,它也可以用来定义类.record关键词的引入,主要是为了提供一种更为简洁.紧凑的final类的定义方式. ...

  2. EF Core 配置模型

    0 前言 本文的第一节,会概述配置模型的作用(对数据模型的补充描述). 第二节描述两种配置方式,即:数据注释(data annotations)和 Fluent API 方式. 第三节开始,主要是将常 ...

  3. 5┃音视频直播系统之 WebRTC 中的协议UDP、TCP、RTP、RTCP详解

    一.UDP/TCP 如果让你自己开发一套实时互动直播系统,在选择网络传输协议时,你会选择使用UDP协议还是TCP协议 假如使用 TCP 会怎样呢?在极端网络情况下,TCP 为了传输的可靠性,将会进行反 ...

  4. 142_Power BI之同比预测

    博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 一.背景 最近刚好在做一个简单同比预测的模型,预测方法很简单,就是累计同比预测,把MTD展示出来. [video widt ...

  5. Link-Cut-Tree(1)

    参考论文 求解范围:(动态树问题) 树上路径查询.修改 动态连边.删边 换根 lca 算法逻辑 概念: 类似树链剖分,把一棵树拆成许多链,每个链用splay维护(链上的为实边,否则为虚边),splay ...

  6. 前端3JS1

    内容概要 溢出属性 定位属性 z-index JavaScript简介 变量与注释 数据类型 内容详情 溢出属性 # 文本内容超出了标签的最大范围 overflow: hidden; 接隐藏文本内容 ...

  7. ExtJS 布局-Card 布局(Card layout)

    更新记录: 2022年6月1日 开始. 2022年6月6日 发布. 1.说明 卡片布局类似牌堆,每次只有一个子组件可见,子组件几乎填满了整个容器.卡片布局常用于向导(Wizard)和选项卡(Tabs) ...

  8. C#中将string[] 转成 int[]的几种方法

    C#中将string[] 转成 int[]的方式有很多种. 直接遍历转换 这是最简单粗暴的方式.实例代码: 使用LINQ遍历 本质和直接遍历没多大差异,但代码量更少,代码更美观.实例代码: 注意:需要 ...

  9. 重学ES系列之Set实现数组去重、交集、并集、差集

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. MySQL-1-概念

    数据库相关概念 DB:数据库(database):存储数据的"仓库".它保存了一系列有组织的数据 DBMS:数据库管理系统,又称为数据库软件(产品),用于管理DB中的数据 SQL: ...