python - 在 Mac OSX 中运行 python 脚本启动权限问题
问题描述
我有一个简单的 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
将屏幕截图从我的桌面移动到我的 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 脚本
- 选择Pass Input: 作为参数
- 输入
/bin/bash -c "$1"
作为脚本的主体(见下面的截图) - 单击文件>保存并将应用程序保存在您想要的任何位置(
run-script.app
在本例中)
- 接下来,运行刚刚手动创建的应用程序,以确保它具有所需的权限(您还可以在Security & Privacy中授予新应用程序全盘访问权限):
- 打开终端.app
- 执行命令
open -a run-script.app organize-screenshots.sh
- 当 macOS 询问应用程序是否可以访问您的桌面时,单击允许
- 现在您已准备好在 launchd 中配置您的脚本。使用以下内容更新您的 .plist
ProgramArguments
:
<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>
推荐阅读
- java - 当我单击它时,Java Eclipse 应用程序不会打开
- laravel - Laravel 5.8 查询范围
- git - 如何在 gitlab runner 构建路径中指定项目路径?
- c# - 使用 forge DA 获取访问令牌的问题
- python - 如何用python DataFrame中的条件替换列的值?
- javascript - 如何设置复选框以在本机反应中使用任意存储
- php - 使用 Laravel 计划在每分钟运行一个控制器功能
- javascript - 无法向数组中的对象添加默认值
- python - 机器学习:代表第一个数据集训练的分类器预测第二个数据集
- react-native - 不变量违规错误:超出最大更新深度