使用启动器

时间:2017-03-13 20:49:30

标签: python python-2.7 module launch-agent launchctl

我编写了一个python脚本,如果我正常运行它(python path / to / file.py)。 我需要它每隔几个小时自动运行一次。所以我在/ Users / User / Library / LaunchAgents中创建了一个plist文件,它触发一个最终触发python脚本的.sh文件。

python脚本无法正常运行。我设法将问题缩小到模块“PyPDF2”和“reportlab”(如果我排除那些模块,脚本运行正常)。我得到的错误消息是“没有名为reportlab.pdfgen的模块”和“没有名为PyPDF2的模块”。

代码的相关部分是:

.sh脚本:

#!/bin/sh

python /Users/User/path/to/file.py

Python脚本:

#!/usr/bin/python2.7
# -*- coding: utf-8 -*-

import mechanize  #pip install mechanize
import time
import os
from reportlab.pdfgen import canvas
from PyPDF2 import PdfFileWriter, PdfFileReader

同样,如果我自己运行脚本,脚本也可以运行。我的猜测是,launchctl以root身份运行,root以某种方式找不到/访问模块。我已经进行了广泛的搜索,但找不到任何东西。

我对此比较陌生,可能会遗漏一些明显的东西?

我在Mac上运行2.7版本的python脚本。

这里似乎有什么问题?

感谢您的帮助

更新: 如果我在代码中放置print(sys.path)并自己运行它以及使用触发器,我会得到一长串路径列表。其中一些是相同的,但大多数是不同的。 我也跑了

print(help("modules"))
print(help("modules reportlab"))
print(help("modules PyPDF2"))

我自己并使用触发器。虽然我自己运行模块会显示模块,但如果我使用触发器则不会。

print(reportlab.__file__)
print(PyPDF2.__file__)

给我“/usr/local/lib/python2.7/site-packages/reportlab/init.pyc”和“/usr/local/lib/python2.7/site-packages /PyPDF2/init.pyc”。 我试过跑步 sys.path.append( “/ USR /本地/ LIB / python2.7 /站点包/ PyPDF2 /的初始化 pyc文件”) sys.path.append( “/ USR /本地/ LIB / python2.7 /站点包/ ReportLab的/的初始化 pyc文件”) 我被触发时在脚本中但似乎没有帮助。

0 个答案:

没有答案