我有一个网络剪贴板脚本,当我通过命令行启动时,它运行没有任何问题。我创建了一个crontab作业来定期运行此脚本:
sudo crontab -e
根据syslog消息脚本启动但没有预期的输出,所以我为stdout和stderr消息创建了一个日志文件,并且似乎有一个BeautifulSoup模块导入问题。
import BeautifulSoup
ImportError: No module named bs4
您是否知道可能的根本原因以及我如何解决它?
修改 我的问题与我的不同用户(root)运行的crontabs有关。所以在答案中建议,当我把它改成自己的用户时,问题就解决了!
答案 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