“/Library”目录权限在 Mac 上被拒绝 - Python3

"/Library" directory permission denied on Mac - Python3

我正在尝试创建一个程序来复制 mac 上库目录中的一个目录(路径:“/Library”)。我使用 shutil,它在其他目录中运行良好,但在 Library 目录中运行不佳...

我希望能够编译我的程序,所以我不能运行它作为 root。

这是我的代码:

import shutil

def copy(src_path, dir_path):
    try:
        shutil.copytree(src_path, dir_path)
        print("Success!")
    except:
        print("Impossible to copy the folder...")
        print("Failed!")

copy("/Users/marinnagy/Desktop/Test", "Library/Test")

我认为这是因为库目录受保护并且需要身份验证才能进行更改。 我是否必须向用户发出身份验证请求?还是我需要使用 shutil 以外的其他方法?

感谢您的帮助!

经过大量研究和多次尝试,我终于设法将一个文件夹复制到我的 Library 目录中。

在 macOS 上,python 程序阻止写入受保护目录(如库目录)的过程。编译后(我使用 pyinstaller),python 应用程序似乎无法访问此类文件夹,即使您在系统偏好设置中为该应用程序提供了完整的磁盘访问权限。

所以我使用了一些 AppleScript 来管理这个特定的 copy/paste 任务:

on run {scr_path, dir_path} # Run with arguments
    # Translate standard paths to their quoted form
    set formated_scr_path to quoted form of scr_path
    set formated_dir_path to quoted form of dir_path
    # Run a simple shell script to copy the repertory in the other
    do shell script "cp -R " & formated_scr_path & space & formated_dir_path ¬
    with administrator privileges # Ask for administrator privileges
end run

然后,在我的 python 程序中,当我想 copy/past 到受保护的目录(如图书馆目录)时,我调用 AppleScript 程序:

import subprocess

def copy(scr_path, dir_path):
    # Use the osascript process to call the AppleScript
    # Give the paths in arguments
    process = subprocess.call(['osascript', "path/to/applescript", 
    scr_path, dir_path])
return process

copy("path/to/folder 1", "path/to/folder 2")

此方法适用于受保护的曲目。后台的 AppleScript 运行 和身份验证 window 弹出,要求用户将自己标识为管理员: result screenshot