由于Windows存在管理员权限限制,执行需管理员权限的命令时会出错,

有两种方案,

1.采用python调用vbs文件,vbs调用bat文件

2.采用提供弹出用户管理员权限方式让用户确认

1.采用python调用vbs文件,vbs调用bat文件

vbs文件

  1. cwd = CreateObject("Scripting.FileSystemObject").GetFile(Wscript.ScriptFullName).ParentFolder.Path
  2. path = cwd & "\cmd.bat"
  3. Set shell = CreateObject("Shell.Application")
  4. shell.ShellExecute path,"","","runas",0 ' 0代表不显示cmd命令窗口,1代表显示cmd命令行1窗口
  5. WScript.Quit

详细vbs 执行见此处:vbs ShellExecute命令

bat文件

bat一般为空,主要为执行python时自动写入

python文件

  1. import os
  2. import subprocess
  3. CMD_BAT = os.path.join(os.path.dirname(__file__), "cmd.bat")
  4. VBS_PATH = os.path.join(os.path.dirname(__file__), "shell.vbs")
  5. def runAdmin(cmd):
  6. """
  7. exec command with administrator
  8. :param: cmd: command requiring administrator
  9. """
  10. try:
  11. # 将命令写入bat文件
  12. with open(CMD_BAT, "w") as f:
  13. f.write(cmd)
  14. # 执行vbs文件
  15. vbs_command = "wscript {}".format(VBS_PATH)
  16. print(f"vbs_command:{vbs_command}")
  17. sp = subprocess.Popen(
  18. vbs_command,
  19. shell=True,
  20. stdout=subprocess.PIPE,
  21. stderr=subprocess.PIPE
  22. )
  23. print("[PID]: %s[cmd]: %s" % (sp.pid, cmd))
  24. except Exception as e:
  25. print(f"exec vbs fail:{e}")
  26. if __name__ == "__main__":
  27. 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"
  28. runAdmin(command)

2.采用提供弹出用户管理员权限方式让用户确认

直接将runAdminCmdDecorator装饰在需要管理员权限执行的函数上即可

  1. import os, sys, ctypes
  2. from win32comext.shell.shell import ShellExecuteEx
  3. from functools import wraps
  4. def is_user_admin():
  5. """
  6. 检查admin
  7. """
  8. return ctypes.windll.shell32.IsUserAnAdmin()
  9. def run_as_admin():
  10. """
  11. 弹出管理员运行弹窗
  12. """
  13. script = os.path.abspath(sys.argv[0])
  14. print(f"script:{script}")
  15. args = ' '.join(sys.argv[1:]) if len(sys.argv) > 1 else ''
  16. ShellExecuteEx(lpFile=sys.executable, lpParameters=f"{script} {args}",
  17. nShow=1, lpVerb='runas')
  18. return
  19. def runAdminCmdDecorator(func):
  20. @wraps(func)
  21. def inner(*args, **kwargs):
  22. if not is_user_admin():
  23. run_as_admin()
  24. else:
  25. func(*args, **kwargs)
  26. 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. 创建进程,join方法,进程对象相关属性和方法,僵尸进程和孤儿进程,守护进程,互斥锁

    创建进程 在python中提供了一个multiprocessing模块可以帮助我们使用多进程解决问题.在multiprocessing 模块中有一个类Process. from multiproces ...

  2. 羽夏 Bash 简明教程(下)

    写在前面   该文章根据 the unix workbench 中的 Bash Programming 进行汉化处理并作出自己的整理,并参考 Bash 脚本教程 和 BashPitfalls 相关内容 ...

  3. 从rocketmq入手,解析各种零拷贝的jvm层原理

    在上一篇文章中,主要介绍了rocketmq消息的存储流程.其主要使用了mmap的零拷贝技术实现了硬盘和内存的映射,从而提高了读写性能.在流程中有一个非常有意思的预热方法并没有详细分析,因为其中涉及到了 ...

  4. webpack基础知识介绍

    1.开发模式 开发模式顾名思义就是我们开发代码时使用的模式 webpack默认只处理js文件,对样式是没办法处理的.因此要处理css资源需要引入CSS-loader 处理CSS资源 如果要使用 css ...

  5. 主管发话:一周搞不定用友U8 ERP跨业务数据分析,明天就可以“毕业”了

    随着月末来临,又到了汇报总结的时刻. (图片来自网络) 到了这个特殊时期,你的老板就一定想要查看企业整体的运转情况.销售业绩.客户实况分析.客户活跃度.Top10 sales. 产品情况.订单处理情况 ...

  6. 微信小程序开发 记录

    采坑了 微信小程序--TabBar不出现的一种原因 学习微信小程序中,遇到底部的TabBar不出现的问题.经过多番尝试,终于解决问题.在此记录问题产生的原因和对策.下面先描述错误现象,接着指出错误原因 ...

  7. 第06组Alpha冲刺(6/6)

    目录 1.1 基本情况 1.2 冲刺概况汇报 1.郝雷明 2.曹兰英 3. 方梓涵 4.曾丽莉 5.鲍凌函 6.杜筱 7.黄少丹 8.詹鑫冰 9.董翔云 10.吴沅静 1.3 冲刺成果展示 1.1 基 ...

  8. 【转】理解 CI 和 CD 之间的区别

    有很多关于持续集成(CI)和持续交付(CD)的资料.很多文章用技术术语来进行解释,以及它们怎么帮助你的组织.可惜的是,在一些情况下,这些方法通常与特定工具.甚至供应商相关联.在公司食堂里非常常见的谈话 ...

  9. c++ 辗转相除(动图)

    #include<iostream> #include<cstdio> #include<iomanip> #include<cstring> usin ...

  10. 快速 IO

    IO 的进化史 cin和cout 刚开始学的时候,老师叫我们用 cin 和 cout 大概是因为这最简单吧 cin>>x; cout<<x scanf和printf 学到函数了 ...