尝试每小时使用crontab运行一个python脚本,但python代码的一部分不会执行

时间:2014-10-18 01:16:58

标签: python python-2.7 selenium selenium-webdriver crontab

我使用python和selenium编写了一个脚本,试图注册一个名为puppy play的类。 Crontab每小时运行一次脚本,并将任何输出发送到名为“cronpup.log”的文件。这部分代码在我的python脚本中,它只是检查注册是否成功,然后将结果附加到文件“pup.log”。

# Pup Logger    
f = open("pup.log", "a+")
f.write(time.strftime("%Y-%m-%d %H:%M:%S   "))
if pups == 1:
    f.write("Pups!\n")
elif pups == 0:
    f.write("No Pups\n")
else:
    f.write("Ruh Roh, Something is wrong\n")
f.close()

这会创建“pup.log”文件,其中的条目如下所示

$ pup.log
2014-10-17 17:49:18   No Pups
2014-10-17 19:37:28   No Pups

我可以从终端运行python脚本,但是当crontab执行脚本时,“pup.log”中没有新的条目。我已经检查了crontab的输出并且什么也没找到。这是crontab的输出

$ cronpup.log
.
----------------------------------------------------------------------
Ran 1 test in 81.314s

OK

似乎crontab只是忽略了代码的那一部分,但这看起来很傻。任何想法如何使这个工作?

1 个答案:

答案 0 :(得分:1)

该行

f = open("pup.log", "a+")

是你的问题。 Open正在查看pup.log的当前工作目录,必要时创建它并附加到它。如果你在与python脚本相同的目录中从终端运行,那将显示pup.log。从cron运行时的cwd是作业运行的用户的主目录,因此当从cron运行时,它会将pup.log文件丢弃到系统上的其他位置。

您可以硬编码完整路径,也可以使用

os.chdir(os.path.dirname(os.path.abspath(__file__)))

将当前工作目录设置为python文件所在的目录,或者修改上面的内容以便将pup.log放在你喜欢的地方。