3

我正在尝试从虚拟环境在我的 Mac 上每分钟自动运行一个 python 脚本。我确信我没有以某种关键方式正确理解权限、路径和环境变量,这使我无法弄清楚这一点。

我是启用了 root 权限的管理员用户。我运行 HomeBrew、PIP 和 Virtualenv 来管理不同项目的 python 包和虚拟环境。

我想每 60 秒执行一次以下操作:

$ source /.virtualenvs/myenvironment/bin/activate
$ cd ~/desktop/python/
$ python myscript.py
$ deactivate  

我努力了:

(a) 为 Launchd 编写我自己的 plist - 我相信这些文件格式正确。

(b) 为您管理 Launchd 守护进程和代理的程序(包括 Launch Control 和 Lingon)。

(c) 我试过简单地编辑 crontab(只有在我使用 sudo 命令时才允许)。

用于命令的 python 脚本从在线资源中提取数据并将其存储在 sqlite 表中。我可以告诉 cron 没有运行,因为 sqlite db 没有被触及。

任何想法将不胜感激。

4

3 回答 3

4

您没有确切地说出您对 launchd 和 cron 的尝试,但我敢打赌您没有正确使用它们中的任何一个。两者都面向运行单个、隔离的命令(/programs),而不是 shell 命令序列。虽然可以使用单个 cron 作业或启动项来执行此操作,但它会很混乱。最简单的方法是编写一个执行您想要的序列的 shell 脚本(确保在开头包含一个 shebang,并使用 启用脚本的执行权限chmod +x /path/to/script),然后从 cron 或 launchd 运行它:

#!/bin/bash
source /.virtualenvs/myenvironment/bin/activate
cd ~/desktop/python/
python myscript.py
deactivate

我不建议使用 Automator 来包装命令序列;它是为基于 GUI 的脚本而设计的,可能无法在纯后台作业中正常工作。

于 2013-07-08T00:16:12.107 回答
2

我遇到了同样的问题,最近解决了。在这里查看我采取的步骤。基本上它处理需要 PYTHONPATH 的 shell,而不仅仅是 PATH。

于 2013-07-16T22:30:59.090 回答
0

所以我仍然不确定为什么我不能配置 Launchd 或 Crontab 来为我工作:我仍然怀疑它与环境变量有关。

如果其他人在这个问题上遇到困难,我建议创建一个运行您想要运行的 shell 脚本的 Automator 应用程序,然后使用 Lingon 或 Launch Control 以您想要的任何频率运行 Automator 应用程序文件。

于 2013-07-08T00:02:13.557 回答