由于导入模块错误,Python sudo cron作业无法正常工作

时间:2017-09-24 09:43:38

标签: python cron

我有一个网络剪贴板脚本,当我通过命令行启动时,它运行没有任何问题。我创建了一个crontab作业来定期运行此脚本:

sudo crontab -e

根据syslog消息脚本启动但没有预期的输出,所以我为stdout和stderr消息创建了一个日志文件,并且似乎有一个BeautifulSoup模块导入问题。

import BeautifulSoup
ImportError: No module named bs4

您是否知道可能的根本原因以及我如何解决它?

修改 我的问题与我的不同用户(root)运行的crontabs有关。所以在答案中建议,当我把它改成自己的用户时,问题就解决了!

3 个答案:

答案 0 :(得分:4)

crontab的sudo infront意味着root用户运行脚本。 root用户没有安装美味汤,因此无法找到该模块。

取而代之的是" sudo crontab -e"然后运行并且只是" crontab -e"。将脚本放在那里将从您的用户帐户运行它,并且应该可以访问漂亮的汤模块

答案 1 :(得分:0)

对于您用于cron作业的每个用户,您都应该执行pip install your-library。因为cron使用用户运行作业的环境。

答案 2 :(得分:0)

如果有必要在crontab中以sudo身份运行Python脚本,则应利用PYTHONPATH变量(如Sraw的注释中所述)来增加模块文件的默认搜索路径。

首先,通过例如,确定模块的位置。运行Python(模块已成功导入)并检查sys.path

import sys
print(sys.path)

列出的路径之一将是位置(将其称为location/of/module)。找到它并将您在sudo crontab -e中的条目更改为

PYTHONPATH=/location/of/module python your_script.py