gpt4 book ai didi

python - 在 Windows 中请求管理员访问 Python 函数

转载 作者:可可西里 更新时间:2023-11-01 11:47:20 26 4
gpt4 key购买 nike

我想使用 Python 函数将文件列表复制到 Windows 系统目录 (C:\Windows)

我有一个函数:

import shutil

def copy_list(src_list, dst):
for file in src_list:
shutil.copy(file, dst)

我想这样调用它:

def copy_as_admin():
#... some code to obtain user elevation ...

copy_list(files_list, "C:\\Windows\")

我怎样才能做到这一点? PS:我正在使用 Python3,我在这个线程中尝试了解决方案, How to run python script with elevated privilege on windows但这些解决方案适用于 Python 版本 2。

最佳答案

以下示例基于 Cyrbil 的出色工作。特别地,引入了两个枚举。第一个允许轻松指定如何打开提升的程序,第二个有助于在需要轻松识别错误时提供帮助。请注意,如果您希望将所有命令行参数传递给新进程,sys.argv[0] 应该替换为函数调用:subprocess.list2cmdline(sys.argv).

#! /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()

关于python - 在 Windows 中请求管理员访问 Python 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41851413/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com