gpt4 book ai didi

Python、Beautiful Soup 和 cron

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:16:15 26 4
gpt4 key购买 nike

我正在尝试使用 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 上从终端运行得很好。这似乎表明问题不在于脚本。

这个错误是我用Beautiful Soup得到汇总表没有报错后出现的。它试图在函数 cleanNote 中获取详细信息表。这让我觉得这不是 cron 和 Beautiful Soup 之间的问题。

什么可能导致在命令行上顺利运行的程序在 cron 作业中崩溃?

编辑:仍然不清楚为什么今天早些时候它在完全相同的时间从命令行运行而没有问题时崩溃,但 cron 作业现在似乎正在正确执行而没有错误。我没有做任何更改,只是将工作设置为下午晚些时候,它运行良好。

最佳答案

通常,cron 作业在不提供任何“登录”文件来源的 shell 中执行:~/.profile~/.登录~/.kshrc 等等。

如果不查看 crontab -l(和您的登录脚本)的输出是不可能知道的,但我的猜测是您的脚本需要交互式登录环境中的某些东西。通常的嫌疑人包括:

  • 默认的 PATH 环境变量正在查找与您从命令行使用的版本不同的 python

  • 您的 PYTHONHOMEPYTHONPATHPYTHONSTARTUP 环境变量包含您所依赖的东西。

  • 您的交互式 shell 有 “python” 的别名。

  • 您一直在 virtualenvvenv 中运行脚本,当您从 cron.

  • 您的脚本依赖于您当前工作目录中的某些内容。

要缩小可疑列表的范围,请尝试在命令行上运行 python -E update.py 以查看忽略各种 PYTHON* 环境变量时会发生什么。您也可以尝试使用 -s-S 选项——查看 python 手册页了解更多信息。或者使用绝对路径名从其他目录调用您的脚本。

如果问题只是缺少一个环境变量,您可以更改 cron 条目以明确设置它:

* * * * * env VAR=something python /path/to/update.py

或者对于不同的解释器:

* * * * * /path/to/python8.e.planks-constant /path/to/update.py

对于更复杂的设置,大多数人会编写一个前端 shell 脚本来配置所需的环境,然后然后运行您真正想要的脚本:

* * * * * /path/to/update.sh

...其中 update.sh 充满了 cdexport,也许还有 source 语句。

关于Python、Beautiful Soup 和 cron,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29656866/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com