【发布时间】:2021-08-04 13:54:28
【问题描述】:
让 cron 在我的树莓派 3b 上工作时遇到的麻烦不止这些。 我写了一个 python 脚本,从 thonny 或终端启动它没有问题,它运行顺利。
但是,当以以下方式启动 cron 作业时(根据测试时间更改分钟和小时):
25 21 * * * /usr/bin/python3 /home/pi/main.py >> /home/log/myscript.log 2>&1
我收到以下错误消息:
Traceback (more recent call last):
File "/home/pi/main.py", line 9, in <module>
import tweepy
ImportError: No module named 'tweepy'
无论我打电话给sudo crontab -e、nano crontab -e 还是cron -e。
我开始调查,我猜想调用 python 版本的问题在哪里。
因此,我用python3.5 替换了python3 调用,后来用python3.5m 甚至用python3.8 替换了没有结果。在任何尝试中,我都尝试通过终端启动相同的命令,并且效果很好。
尝试卸载并重新安装 tweepy 并检查了 Thonny 使用的 python 是 3.5 版本。
有什么问题吗? 快把我逼疯了。
编辑: 我备份了我的脚本并将树莓派重新安装到最新版本(5.10.17 linux 内核)。 同样,我尝试将脚本与 Thonny 和终端一起使用并运行。
再次,我在使用 crontab 时遇到了同样的问题。
但是,我有一个想法。 我将 tweepy 版本更新为可用的最新版本,这就像一次绝望的尝试,但发生了一些变化。
而不是出现与 tweepy 相关的错误, cron 给了我这个:
Traceback (most recent call last):
File "/home/pi/Documents/TwitterBot/main.py", line 17, in <module>
a = soup.select('table > tr:has(> td > a:-soup-contains("San Pellegrino Terme")) td')
File "/usr/lib/python3/dist-packages/bs4/element.py", line 1376, in select
return soupsieve.select(selector, self, namespaces, limit, **kwargs)
File "/usr/lib/python3/dist-packages/soupsieve/__init__.py", line 112, in select
return compile(select, namespaces, flags, **kwargs).select(tag, limit)
File "/usr/lib/python3/dist-packages/soupsieve/__init__.py", line 63, in compile
return cp._cached_css_compile(pattern, namespaces, custom, flags)
File "/usr/lib/python3/dist-packages/soupsieve/css_parser.py", line 205, in _cached_css_compile
CSSParser(pattern, custom=custom_selectors, flags=flags).process_selectors(),
File "/usr/lib/python3/dist-packages/soupsieve/css_parser.py", line 1010, in process_selectors
return self.parse_selectors(self.selector_iter(self.pattern), index, flags)
File "/usr/lib/python3/dist-packages/soupsieve/css_parser.py", line 852, in parse_selectors
has_selector, is_html = self.parse_pseudo_class(sel, m, has_selector, iselector, is_html)
File "/usr/lib/python3/dist-packages/soupsieve/css_parser.py", line 510, in parse_pseudo_class
has_selector = self.parse_pseudo_open(sel, pseudo, has_selector, iselector, m.end(0))
File "/usr/lib/python3/dist-packages/soupsieve/css_parser.py", line 654, in parse_pseudo_open
sel.selectors.append(self.parse_selectors(iselector, index, flags))
File "/usr/lib/python3/dist-packages/soupsieve/css_parser.py", line 852, in parse_selectors
has_selector, is_html = self.parse_pseudo_class(sel, m, has_selector, iselector, is_html)
File "/usr/lib/python3/dist-packages/soupsieve/css_parser.py", line 585, in parse_pseudo_class
"'{}' pseudo-class is not implemented at this time".format(pseudo)
NotImplementedError: ':-soup-contains' pseudo-class is not implemented at this time
这是和beautifulsup Cron 运行的版本有关的问题。
我尝试将 beautifulsup 更新到可用的最新版本,但没有结果。
我开始想不通了, 任何帮助将不胜感激。
【问题讨论】:
-
从脚本运行的终端,例如,如果您使用
python3 main.py运行脚本,请查看which python3的输出。和 cron 作业中的一样吗(/usr/bin/python3)? -
是的。相同的路径
-
好极了,那么您能说一下您使用的是哪个
crontab,是系统范围的/etc/crontab还是用户特定的/etc/crontab?作为能够很好地运行脚本的用户,您可以通过crontab -e来编辑用户特定的脚本。 -
我相信有一个系统范围的,谢谢。一回家就确认。另外,我编辑了问题
-
如果使用
crontab -e将命令添加到用户的crontab中不起作用,那么下一步应该检查终端中的sys.path是否与cronjob相同。在您的工作终端中,您可以运行python3 -m site并注意输出吗?然后运行crontab -e并添加* * * * * /usr/bin/python3 -m site > /home/out.txt(或类似的)。稍等片刻,然后将out.txt中的文本与上一个命令的输出进行比较...
标签: python cron python-3.5 libraries