使用Python启动守护程序(OSX)导入模块

时间:2017-04-22 11:40:08

标签: python macos

早上好,我在运行OSX El Capitan的Mac上玩启动守护进程。我已经在Python中制作了我希望在我的机器启动时运行的脚本(它应该通过网络摄像头拍摄照片并将其保存到我指定的目录中)。我已经制作了适当的plist,启动进入恢复模式以禁用csrutil,然后将plist添加到/ System / Library / LaunchDaemons。重启后,我看不到任何图片(绿色网络摄像头灯也没有打开)。

我检查了脚本的错误日志,发现python脚本抛出了一个错误,它无法导入CV2(ImportError:没有名为cv2的模块)。但是,我确实安装了cv2,并且在系统启动后它可以正常工作。我的脚本似乎能够加载其他模块(os,datetime和time),因为它们是在cv2之前导入的。

这是一项额外的安全功能吗?有办法解决这个问题吗?如果有解决方法,即使启用了csrutil,它是否也能正常工作?我不想乱用那些禁用的,我只是禁用它来对LaunchDaemons目录进行必要的更改,然后重新启用它。我在禁用csrutil的情况下重新启动并仍然收到导入错误,因此它似乎不是那样(至少据我所知)。

谢谢!

编辑:更多的谷歌搜索让我发现在我的守护进程的plist中指定的python路径不是与openCV关联的那个。但是,快速回显$ PYTHONPATH给了我/usr/local/lib/python2.7/site-packages,当放入plist时不再在启动时出错,但现在似乎根本没有执行。< / p>

此外,我已经尝试将我写的目录更改为/ tmp /,因为所有用户都可以访问该目录,但仍无济于事。

2 个答案:

答案 0 :(得分:3)

  

问题:但现在似乎根本没有执行。

添加一些日志记录到文件,以验证您的脚本是否正在运行以及距离。

例如:

log = open('/tmp/my_script', 'w')
log.write('after imports')

答案 1 :(得分:1)

您是否曾尝试which python来查看使用的实际Python版本是否是通过 brew 安装的版本(我假设您因为路径而执行了brew install python/usr/local)下?

如果Python可执行文件不是/usr/local下的那个,那么您可能遇到麻烦,请考虑通过 brew 安装不会替换默认系统Python。

相关问题