from crontab import CronTab
from datetime import datetime
import json
import getpass

user = getpass.getuser()

class CronOpt:
    #创建定时任务
    def __init__(self,user=user):
        self.initialize(user)

    #初始化
    def initialize(self,user=user):
        self.cron = CronTab(user)

    #查询列表
    def select(self,reInit = False):
        if reInit != False:
            # 强制重新读取列表
            self.initialize()
        cronArray = []
        for job in self.cron:
            # print job.command
            schedule = job.schedule(date_from=datetime.now())
            cronDict = {
                "task"   : (job.command).replace(r'>/dev/null 2>&1', ''),
                "next"   : str(schedule.get_next()),
                "prev"   : str(schedule.get_prev()),
                "comment": job.comment
            }
            cronArray.append(cronDict)
        return cronArray

    #新增定时任务
    def add(self, command, timeStr, commentName):
        # 创建任务
        job = self.cron.new(command=command)
        # 设置任务执行周期
        job.setall(timeStr)
        # 备注,也是命令id
        job.set_comment(commentName)
        # 写入到定时任务
        self.cron.write()
        # 返回更新后的列表
        return self.select(True)

    #删除定时任务
    def delCron(self,commentName):
        for job in self.cron :
            if job.comment == commentName:
                self.cron.remove(job)
                self.cron.write()
        return self.select(True)

    #更新定时任务
    def update(self, command, timeStr, commentName):
        # 先删除任务
        self.delCron(commentName)
        # 再创建任务,以达到更新的结果
        return self.add(command, timeStr, commentName)


if __name__ == '__main__':
    c = CronOpt()
    #print(c.select())
    # 新增定时任务
    #print(c.add("ls /home","*/10 * * * *","测试"))
    # 删除定时任务
    print(c.delCron("测试"))