簡體   English   中英

在 Mac OSX 中運行 python 腳本啟動權限問題

[英]Running python script in Mac OSX launchd permission issue

我有一個簡單的 python 腳本,它正在從我的下載文件夾中移動文件。 當我通過終端運行該腳本時,它運行良好。 當它通過launchd運行時會發生此問題:

Traceback (most recent call last):
  File "/Users/ben/Project/Automation/CleanDownload.py", line 11, in <module>
    for f in listdir(downloadFolder):
OSError: [Errno 1] Operation not permitted: '/Users/ben/Downloads/'

任何想法為什么?

這是我用來規避此問題的解決方法。 我試圖運行一個簡單的 shell 腳本,但同樣的解決方法也適用於 Python 腳本。 總結一下,涉及的步驟是:

  • 創建一個名為例如 run-script.app 的自動化應用程序,它有一個 bash 腳本,該腳本運行傳遞給它的任何文件
  • 要么通過安全性和隱私為全自動應用程序提供全磁盤訪問權限,要么手動運行一次,然后在 macOS 提示權限時單擊允許
  • 使用您要運行的任何腳本調用自動機應用程序

更多細節:

  • 無論您想運行什么腳本,請確保它是可執行的(使用chmod +x )並且您擁有正確的#! 腳本頂部的行(例如#!/bin/bash )。 在此示例中,我將使用~/scripts/organize-screenshots.sh中的~/scripts/organize-screenshots.sh將屏幕截圖從我的桌面移動到我的 Google Drive 目錄:
#!/bin/bash
user_dir="/Users/soxley"

find "$user_dir"/Desktop -name 'Screen Shot *.png' -exec mv {} "$user_dir"/Google\ Drive/pictures/screenshots/ \;
  • 接下來,創建一個 Automator 應用程序:
    • 打開自動機
    • 單擊新建文檔
    • 選擇應用
    • 點擊選擇
    • 選擇實用程序 > 運行 Shell 腳本
    • 選擇傳遞輸入:作為參數
    • 輸入/bin/bash -c "$1"作為腳本的主體(見下面的截圖)
    • 單擊“文件”>“保存”並將應用程序保存到您想要的任何位置(在本例中為run-script.app
  • 接下來,運行剛剛手動創建的應用程序以確保它具有所需的權限(您還可以在Security & Privacy 中授予新應用程序的完整磁盤訪問權限):
    • 打開Terminal.app
    • 執行命令open -a run-script.app organize-screenshots.sh
    • 當 macOS 詢問應用程序是否可以訪問您的桌面時,單擊允許
  • 現在您已准備好在 launchd 中配置您的腳本。 使用以下ProgramArguments更新您的 .plist :
<key>ProgramArguments</key>
<array>
  <string>open</string>
  <string>-a</string>
  <string>/Users/soxley/scripts/run-script.app</string>
  <string>/Users/soxley/scripts/organize-screenshots.sh</string>
</array>

現在您應該能夠使用此應用程序作為包裝器運行您想要的任何腳本。 自動化應用選擇 自動化應用內容

如果您在 OSX 10.11 (El Capitan)(系統完整性保護)中安裝 Scrapy 時還沒有看到這個,請查看“OSError: [Errno 1] Operation not allowed”

還有這個https://apple.stackexchange.com/questions/339862/ls-operation-not-permitted-mojave-security

根據Roger 的說法,轉到“系統偏好設置” ->“安全與隱私”

並為Terminal提供 Full Disk Access。

https://discussions.apple.com/thread/8637915

您是否嘗試過授予/sbin/launchd全盤訪問權限?

很長一段時間以來,我一直在為 Big Sur 打破這個問題。 對我有用的是以下內容:

  1. 授予對 Python3 的全盤訪問權限
  2. 授予對 launchd 和 launchctl 的全盤訪問權限

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM