在python中,有没有办法将一些runas=True参数传递给subprocess.run函数?我想以管理员身份运行一个进程(提升权限)。感谢您的回答:) 编辑:使用Windows操作系统。
runas=True
subprocess.run
pkbketx91#
Windows有一个命令行实用程序“运行方式”,可用作第一个月进一步参考https://technet.microsoft.com/en-us/library/cc771525.aspx您可以在下面的代码中使用它
import subprocess as sp prog = sp.Popen(['runas', '/noprofile', '/user:Administrator', 'NeedsAdminPrivilege.exe'],stdin=sp.PIPE) prog.stdin.write('password') prog.communicate()
3wabscal2#
如果要以具有管理员权限的同一用户身份运行命令请参考此解决方案:
os.system(r''' Powershell -Command "& { Start-Process \"notepad.exe\" -ArgumentList @(\"C:\\Windows\\System32\\drivers\\etc\\hosts\") -Verb RunAs } " '''
原始答案可在此处找到https://superuser.com/a/753600/1088510
jmo0nnb33#
有三种方法:1.使用runas,如this answer所示。这种方法的缺点是使用管理员帐户,而不是当前用户的管理员权限。如果计划将软件部署到用户,这种方法效果不佳。1.如this question中所述,使用ShellExecute启动子进程,缺点是不能使用stdin/stdout/stderr。1.使用JetBrains的WinElevator(带签名的launcher.exe和elevator.exe可在here中获得)。这种方法的缺点是需要提供两个额外的~150kb二进制文件,优点是可以与stdin/stdout/stderr交互。
runas
ShellExecute
WinElevator
e7arh2l64#
正如其他人所建议的,你可以使用powershell来实现这一点。以下是我用来提升到管理员的PS函数:
# ========================================= Admin Rights ======================================================= # Usage: asAdmin $PSCommandPath function asAdmin { [string]$cmdPath = $args[0] if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { Start-Process powershell.exe "-NoProfile -ExecutionPolicy Bypass -File `"$cmdPath`"" -Verb RunAs; exit } } #-noexit function asAdminWithSTA { [string]$cmdPath = $args[0] if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { Start-Process powershell.exe "-sta -NoProfile -ExecutionPolicy Bypass -File `"$cmdPath`"" -Verb RunAs; exit } }
4条答案
按热度按时间pkbketx91#
Windows有一个命令行实用程序“运行方式”,可用作
第一个月
进一步参考https://technet.microsoft.com/en-us/library/cc771525.aspx
您可以在下面的代码中使用它
3wabscal2#
如果要以具有管理员权限的同一用户身份运行命令
请参考此解决方案:
原始答案可在此处找到https://superuser.com/a/753600/1088510
jmo0nnb33#
有三种方法:
1.使用
runas
,如this answer所示。这种方法的缺点是使用管理员帐户,而不是当前用户的管理员权限。如果计划将软件部署到用户,这种方法效果不佳。1.如this question中所述,使用
ShellExecute
启动子进程,缺点是不能使用stdin/stdout/stderr。1.使用JetBrains的
WinElevator
(带签名的launcher.exe和elevator.exe可在here中获得)。这种方法的缺点是需要提供两个额外的~150kb二进制文件,优点是可以与stdin/stdout/stderr交互。e7arh2l64#
正如其他人所建议的,你可以使用powershell来实现这一点。以下是我用来提升到管理员的PS函数: