Crontab执行python脚本,但是出了点问题

时间:2019-04-15 23:08:30

标签: python dictionary cron pygame

我是编程新手。我认为我已经快要解决我的问题了,但是它最终伤了我的大脑,我需要帮助。

我正在将pygame脚本作为crontabs中的计划任务运行。我有一个可以成功执行并执行应做的代码。我还有另一个执行的代码,但是当它执行时,屏幕变成空白,通常显示一些我在Linux启动时通常看到的行,并且停留在那里。

我已经经历了两个代码,并且绝对所有内容都是相似且正确的。每个脚本的开头都有#!/usr/bin/env python。 (在其他地方,建议我提供确切的版本,因为我在脚本中使用了字典,而且显然crontab可能与pygame使用的词典内容混淆了。我不太了解,我尝试了一下,但是在我的树莓派,所以我不认为这是解决方案。)

每个脚本在终端中运行正常。

我已经将PATH变量设置为python脚本使用的变量,并且还将SHELL设置为/ bin / bash。在任务中,我还具有“ export DISPLAY =:0”(例如12 21 * * * export DISPLAY =:0 && ...)。我发现这是使其他代码正常工作的魔术。是什么让我想知道是否需要在任务中设置另一个环境变量?

第一个代码和第二个代码之间的区别:第二个代码使用pygame.mixer并播放声音文件。在脚本中,声音文件在字典中(例如,声音= {“ word”:“ /absolute/path/to/file.wav”,“ word2”:... etc}正如我说的,这段代码在终端运行良好

那么为什么一个脚本起作用而另一脚本却不起作用。两者都使用pygame。另一个仅使用声音,字典而不是字符串,以及pygame.mixer。我的理由是,crontab卡在其中之一上存在问题。

1 个答案:

答案 0 :(得分:0)

我修复了它。我没有根了。当我在用户中运行crontab时,它起作用了。一定是因为根无法获取文件。 重要提示是添加“ import os”,并在脚本中的某个位置添加“ print(os.environ)”,以检查在终端中运行时的所有环境变量。 然后将$ PATH变量复制到crontab作业的顶部。 与$ SHELL相同。 $ DISPLAY变量需要放在行中,因此例如'* * * * * export DISPLAY =:0 && / usr / bin / python /home/user/file.py' 查看如何为命令和文件路径放置绝对路径。我还为脚本中的文件设置了绝对路径,即使文件与脚本位于同一文件夹中也是如此。我不确定是否有必要,我接下来会检查。我已经看到很多人都在为这个问题而苦苦挣扎,而建议通常归结为这些问题。