在Python脚本中使用Crontab

时间:2016-07-25 13:41:09

标签: python subprocess crontab

我正在尝试在python脚本中使用crontab的内容。我想用python做一切。最后,我希望获取crontab的内容,将其转换为临时文本文件,读入文本文件的行并进行操作。

有没有办法可以使用crontab文件的内容并将其操作,就好像它是一个文本文件???

我已经查看了子进程模块,但我不太确定这是否是正确的解决方案....

注意:我不是试图以任何方式编辑crontab,我只是想读取它并在我的python代码中操作它。最后,crontab将保持不变。我只需要在crontab中包含的信息就可以了。

2 个答案:

答案 0 :(得分:2)

如果你要尝试crontab -h,这通常是帮助选项,你会得到这个:

$ crontab -h
crontab: invalid option -- 'h'
crontab: usage error: unrecognized option
Usage:
 crontab [options] file
 crontab [options]
 crontab -n [hostname]

Options:
 -u <user>  define user
 -e         edit user's crontab
 -l         list user's crontab
 -r         delete user's crontab
 -i         prompt before deleting
 -n <host>  set host in cluster to run users' crontabs
 -c         get host in cluster to run users' crontabs
 -x <mask>  enable debugging

Default operation is replace, per 1003.2

要注意的行是-l list user's crontab。如果您尝试这样做,您会看到它列出了一个crontab文件的内容。基于此,您可以运行以下命令:

import subprocess

crontab = subprocess.check_output(['crontab', '-l'])

crontab将包含一个人的crontab的内容。在Python3中,它将返回二进制数据,因此您需要crontab = crontab.decode()

答案 1 :(得分:0)

当您尝试更改crontab条目时(例如删除已完成的任务):

import os
import datetime
os.system("crontab -l > new")
read_file = open("new","r")
write_file = open("new_edit","w")
today= datetime.datetime.now()
current_date = today.day
current_month = today.month
for lines in read_file:
        if lines=="\n":
                pass
        else:
                sep = lines.split(" ")
                if (current_date < int(sep[2]) and current_month == int(sep[3])):
                        write_file.write(lines)
write_file.close()
os.system("sudo mv new_edit /var/spool/cron/ec2-user")

此代码有助于删除前一天的任务。我想这会对你有帮助。