下面的例子建立在Cyrbil的出色的工作。特别介绍了两个枚举。第一个功能允许轻松指定升级程序如何打开,第二个功能可以帮助识别错误。请注意,如果您希望将所有命令行参数传递给新进程,则应该使用subprocess.list2cmdline(sys.argv)
函数替换sys.argv[0]
。
#! /usr/bin/env python3
import ctypes
import enum
import sys
# Reference:
# msdn.microsoft.com/en-us/library/windows/desktop/bb762153(v=vs.85).aspx
class SW(enum.IntEnum):
HIDE = 0
MAXIMIZE = 3
MINIMIZE = 6
RESTORE = 9
SHOW = 5
SHOWDEFAULT = 10
SHOWMAXIMIZED = 3
SHOWMINIMIZED = 2
SHOWMINNOACTIVE = 7
SHOWNA = 8
SHOWNOACTIVATE = 4
SHOWNORMAL = 1
class ERROR(enum.IntEnum):
ZERO = 0
FILE_NOT_FOUND = 2
PATH_NOT_FOUND = 3
BAD_FORMAT = 11
ACCESS_DENIED = 5
ASSOC_INCOMPLETE = 27
DDE_BUSY = 30
DDE_FAIL = 29
DDE_TIMEOUT = 28
DLL_NOT_FOUND = 32
NO_ASSOC = 31
OOM = 8
SHARE = 26
def bootstrap():
if ctypes.windll.shell32.IsUserAnAdmin():
main()
else:
hinstance = ctypes.windll.shell32.ShellExecuteW(
None, 'runas', sys.executable, sys.argv[0], None, SW.SHOWNORMAL
)
if hinstance <= 32:
raise RuntimeError(ERROR(hinstance))
def main():
# Your Code Here
print(input('Echo: '))
if __name__ == '__main__':
bootstrap()
的可能的复制(http://stackoverflow.com/questions/19672352/how-to-run-python-script-with-elevated-privilege- [如何使用提升的权限在Windows上运行Python脚本] on-windows) – SiHa
该解决方案适用于python版本2。而且它不能在python 3中工作。 – lpsandaruwan
好的,那么也许你应该在你的问题中提到这一点。 – SiHa