python可执行程序必须以管理员_Python实现管理员权限运行CMD指令
一、subprocess.Popen
Python执行 cmd指令属于外部调用,subprocess.Popen 方法即可,实现如下:
# !/usr/bin/python3
# coding: utf-8
import subprocess
def command(cmd, timeout=1800000):
try:
sp = subprocess.Popen(
cmd,
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE
)
print("[PID] %s: %s" % (sp.pid, cmd))
sp.wait(timeout=timeout)
stderr = str(sp.stderr.read().decode("gbk")).strip()
stdout = str(sp.stdout.read().decode("gbk")).strip()
if "" != stderr:
raise Exception(stderr)
if stdout.find("失败") > -1:
raise Exception(stdout)
except Exception as e:
raise e
参考资料
《Python脚本以管理员权限运行》
二、bat 获取管理员权限
但当系统权限不足时,肿么办?
先看传统 bat的处理方式:
@echo off
echo get admin rights
cacls.exe "%SystemDrive%\System Volume Information" >nul 2>nul
if %errorlevel%==0 goto isAdmin
if exist "%temp%\getAdmin.vbs" del /f /q "%temp%\getAdmin.vbs"
echo Set shell = CreateObject^("Shell.Application"^)>"%temp%\getAdmin.vbs"
echo shell.ShellExecute "%~s0","","","runas",1 >>"%temp%\getAdmin.vbs"
echo WScript.Quit >>"%temp%\getAdmin.vbs"
"%temp%\getAdmin.vbs" /f
if exist "%temp%\getAdmin.vbs" del /f /q "%temp%\getAdmin.vbs"
exit
:isAdmin
sc stop WebClient
pause
这段代码的主要流程:
1、调用 cacls.exe 程序查询“系统卷标信息”,验证是否具备管理员权限
2、不具备管理员权限时创建getAdmin.vbs脚本,脚本内容如下
Set shell = CreateObject("Shell.Application")
shell.ShellExecute "%~s0","","","runas",1
WScript.Quit
3、强制执行这个 getAdmin.vbs脚本
4、删除 getAdmin.vbs脚本文件 并退出
那么getAdmin.vbs脚本又做了什么呢?
脚本内容只有三行
① Set shell = CreateObject("Shell.Application")创建 Shell对象
② 以管理员权限运行当前脚本(bat脚本),其中参数 "%~s0" 是当前脚本的绝对路径,"runas"是 shell指令 runas,"1"是管理员权限
③ 脚本退出
总体流程就是 bat在权限不足情况下创建了一个 vb脚本,让 vb脚本反向调用bat
三、Python 的曲线救国
想要做一个工具类,可以实现任意 cmd指令的管理员权限下的执行
挖坑式的自造轮子:
① 创建一个空的 bat文件,动态写入cmd指令
② 创建一个固定内容的 vb脚本
③ Python调用 vb脚本, vb 调用 bat
1、文件结构
2、../tool/script/shell.vbs
cwd = CreateObject("Scripting.FileSystemObject").GetFile(Wscript.ScriptFullName).ParentFolder.Path
path = cwd & "\cmd.bat"
Set shell = CreateObject("Shell.Application")
shell.ShellExecute path,"","","runas",1
WScript.Quit
参考资料
《VBS获取当前路径的两个方法》
《VBS中字符串拼接 & 与 + 的区别》
3、方法实现
工具方法 runAdmin 实现代码如下:
注意:因 cmd指令是动态写入文件,固 runAdmin方法不支持并发,调用时要加线程锁
# !/usr/bin/python3
# coding: utf-8
import os
import subprocess
import traceback
def runAdmin(cmd, timeout=1800000):
f = None
try:
bat = os.getcwd() + r"\tool\script\cmd.bat"
f = open(bat, 'w')
f.write(cmd)
except Exception as e:
traceback.print_exc()
raise e
finally:
if f:
f.close()
try:
shell = os.getcwd() + r"\tool\script\shell.vbs"
sp = subprocess.Popen(
shell,
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE
)
print("[PID] %s: %s" % (sp.pid, cmd))
sp.wait(timeout=timeout)
stderr = str(sp.stderr.read().decode("gbk")).strip()
stdout = str(sp.stdout.read().decode("gbk")).strip()
if "" != stderr:
raise Exception(stderr)
if stdout.find("失败") > -1:
raise Exception(stdout)
except Exception as e:
raise e
如有纰漏,敬请@
python可执行程序必须以管理员_Python实现管理员权限运行CMD指令相关推荐
- Python实现管理员权限运行CMD指令
可使用 #!/usr/bin/env python # coding:utf8 import subprocess cmd="net user test3 123456 /add" ...
- 已使用管理员权限运行CMD,仍报错OSError: [WinError 5] 拒绝访问。: ‘E:\\Code\\Python\\Git\\stable-diffusion-webui\\venv\\
已使用管理员权限运行CMD,仍报错OSError: [WinError 5] 拒绝访问.: 'E:\\Code\\Python\\Git\\stable-diffusion-webui\\venv\\ ...
- java 以管理员执行cmd_cmd管理员代码 JAVA 管理员权限运行CMD文件
敲什么命令可以以管理员身份启动cmd 我建了一个.bat文件,想启动mysql服务,但是必须是以管理员身份去启动才代码如下: @echo off>nul 2>&1 "%S ...
- 管理员权限运行CMD命令
我们在日常工作使用CMD进行命令操作时,经常会遇到需要管理员权限才可以运行命令,那么怎么以管理员权限运行CMD命令? 其实很简单使用三步就行了"运行--cmd--CTRL+shift+ent ...
- python运行cmd指令
虽然python在调用cmd命令方面使用的比较少,不过还是要用的.一起来看! 使用OS模块 用命令system(),运行cmd指令. import os os.system("ipconfi ...
- python语言程序的特点_Python语言概述及其运行机制详解
即日起,我们将打开一个新的编程世界的大门--Python语言.Python是一种跨平台的计算机程序设计语言.是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新 ...
- 管理员权限运行cmd
1.键盘按下"win+R",弹出运行窗口,在里面输入"cmd". 这时我们已经进入普通的cmd模式,如何进入管理员cmd呢? 2.接下来输入:runas /us ...
- python加载包出错_python导入Pmw包运行提示一下错误
我是Centos7.2的系统 python版本是2.7.5 错误提示: Traceback (most recent call last): File "./py020.py", ...
- python画球轨迹图_python绘制铅球的运行轨迹代码分享
我们按照面向过程程序设计的思想,使用python编写了程序,追踪铅球在运行过程中的位置信息.下面,修改程序代码,导入turtle模块,将铅球的运行轨迹绘制出来. python3代码如下: from m ...
- python学生管理系统设计原理_Python建造者模式案例运行原理解析
建造者模式的适用范围:想要创建一个由多个部分组成的对象,而且它的构成需要一步接一步的完成.只有当各个部分都完成了,这个对象才完整.建造者模式表现为复杂对象的创建与表现相分离,这样,同一个过程就有不同的 ...
最新文章
- TensorFlow实现人脸检测和人脸识别
- ACdream 1431 Sum vs Product
- LeetCode Algorithm 1052. 爱生气的书店老板
- 查找字符串中首个非重复字符
- python手机编译器可以干什么_Python是什么?Python学习用哪些编译器?
- 计算机课伤害事故的防范,体育课安全伤害事故的防范与处理
- be my friend
- Java项目课程01:课程概述
- 在ASP.NET中实现AJAX
- python写spark_python开发sparkSQL应用
- leetcode 221. Maximal Square 求一个数组中由1组成的最大的正方形面积 ---------- java...
- DB2 表的常用命令
- Java:Map转List (用stream实现)
- Swift游戏实战-跑酷熊猫 02 创建熊猫类
- NLP与ChatGPT的碰撞:大模型和小模型联合发力
- 关于APP inventor 2 模拟器AI伴侣版本不一致的问题解决
- 常用的 Druid 参数
- CE认证和CCC认证区别?
- can not access a member of class xxx with modifiers “private“
- 一条简单 SQL 执行耗时超 1000ms,问题解决全过程!