簡體   English   中英

Python,美麗湯和cron

[英]Python, Beautiful Soup and cron

我正在嘗試使用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不是湯對象,因此沒有屬性find_all )。 如果這是問題所在,我可以調試一下,但是腳本可以在終端上的完全相同的URL上正常運行。 這似乎表明問題不在於腳本。

我使用Beautiful Soup來獲取沒有錯誤的摘要表后,就會出現錯誤。 它試圖在cleanNote函數中獲取詳細信息表。 這使我認為,一般而言,cron和Beautiful Soup之間不是問題。

是什么會導致在命令行中運行而無障礙的程序在cron作業中崩潰?

編輯 :仍然不清楚為什么它今天早些時候崩潰了,它同時從命令行運行沒有問題,但是cron作業現在似乎正確執行而沒有錯誤。 我沒有做任何更改,只是將工作設置為下午晚些時候,效果很好。

通常, cron作業在不提供任何“登錄”文件的shell中執行: ~/.profile~/.login~/.kshrc等。

沒有看到crontab -l (和您的登錄腳本)的輸出是不可能知道的,但是我的猜測是您的腳本在交互式登錄環境中需要一些東西。 通常的嫌疑犯包括:

  • 默認的PATH環境變量正在查找與從命令行使用的版本不同的python版本。

  • 您的PYTHONHOMEPYTHONPATHPYTHONSTARTUP環境變量包含您依賴的內容。

  • 您的交互式外殼具有別名的"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充滿了cdexportsource語句。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM