我试图用Python和Beautiful Soup来废弃一个网站。脚本从带有python update.py
的终端运行得非常好。正如update.py
所暗示的,我想每天运行这个。看起来是cron的工作,而不是手动运行它。在
但是,当我尝试将其作为cron作业运行时,会出现以下错误:
Traceback (most recent call last):
File "/home/me/documents/blotter/update.py", line 121, in <module>
getDailyLog(yday.month, yday.day, yday.year)
File "/home/me/documents/blotter/update.py", line 103, in getDailyLog
note = cleanNote(cells[7], month, day, year, dispatchNumber)
File "/home/me/documents/blotter/update.py", line 57, in cleanNote
rows = detailTable.find_all("tr")
AttributeError: 'NoneType' object has no attribute 'find_all'
我理解错误消息(detailTable不是soup对象,因此没有属性find_all
)。如果这是问题所在,我可以调试它,但是脚本在终端上运行得很好,就在同一个URL上。这似乎表明问题不在于脚本。在
这个错误是在我用靓汤得到汇总表后出现的。它试图获取函数cleanNote
中的详细信息表。这让我觉得这不是一个问题之间的cron和美丽的汤一般。在
是什么原因导致在命令行上运行的程序在cron作业中崩溃?在
编辑:仍然不清楚为什么今天早些时候它从命令行同时运行而没有出现问题,但cron作业现在似乎没有错误地正确执行。我没有做任何改变,只是把工作安排在下午晚些时候,效果很好。在
通常,
cron
作业是在一个shell中执行的,这个shell不提供任何“登录”文件的源:~/.profile
,~/.login
,~/.kshrc
,依此类推。在如果不看到
crontab -l
(以及您的登录脚本)的输出是不可能知道的,但是我猜您的脚本需要您的交互式登录环境中的某些东西。常见的嫌疑人包括:默认的
PATH
环境变量正在查找python
的不同版本,而不是从命令行中使用的版本。您的}环境变量包含您所依赖的内容。
PYTHONHOME
、PYTHONPATH
或{交互式shell的
"python"
别名为其他名称。您一直在
virtualenv
或venv
中运行该脚本,当您从cron
运行脚本时,该脚本处于非活动状态。您的脚本依赖于您当前工作目录中的内容。
要缩小嫌疑犯列表的范围,请尝试在命令行上运行
python -E update.py
,以查看忽略各种PYTHON*
环境变量时会发生什么。您还可以尝试-s
和-S
选项-查看python
手册页以了解更多信息。或者使用脚本的绝对路径名从其他目录调用脚本。在如果问题只是缺少一个环境变量,则可以更改
cron
项以显式设置它:或者换个口译员:
^{pr2}$对于更复杂的设置,大多数人编写一个前端shell脚本来配置所需的环境,然后然后运行您真正想要的脚本:
…其中}语句。在
update.sh
充满了cd
,export
,可能还有{相关问题 更多 >
编程相关推荐