代码之家  ›  专栏  ›  技术社区  ›  mike

在python中访问APScheduler cron trigger字段值

  •  0
  • mike  · 技术社区  · 6 年前

    this question 我想从APScheduler中提取cron作业触发器的信息。

    for job in scheduler.get_jobs():
      for f in job.trigger.fields:
        print(f.name + " " + str(f))
    

    我能看到所有的田地。 week,hour,day_of_week

    job.trigger.day_of_week 似乎不是“CronTrigger”对象的“属性”。我不知道这是什么东西 job.trigger 以及它的字段是如何打包的。我试着阅读github上的代码,但它更令人费解。

    如何只提取一个字段 day_of_week

    潜得更深我发现

    apscheduler.triggers.cron.fields.DayOfWeekField
    

    我可以通过索引 job.trigger.fields[4] ,这似乎真的很糟糕的风格,因为它取决于'位置'的领域。我得到的是DayOfWeekField,滑稽的是,我也无法从中找回它的价值:

    a.get_value
    <bound method DayOfWeekField.get_value of DayOfWeekField('day_of_week', '1,2,3,4')>
    

    字段的结构已编码 here get_value() .

    最终,在理解了这个概念之后,我想

    if job-day_of_week contains mon
    
    if job-day_of_week == '*'
    
    print ( job-day_of_week )
    

    我非常感谢您的建议/提示!

    1 回复  |  直到 6 年前
        1
  •  1
  •   Jason Jenkins    6 年前

    看看代码,你应该可以得到 day_of_week 字段,而不使用 CronTrigger FIELD_NAMES 财产,例如。

    dow_index = CronTrigger.FIELD_NAMES.index('day_of_week')
    dow = job.trigger.fields[dow_index]
    

    获取字段的值有点复杂,但是看起来 BaseField 实现 str公司 函数,该函数应为您提供将字段创建为字符串的表达式的值,您可以对该字符串进行分析以查找所需内容:

    dow_value_as_string = str(dow)
    if 'mon' in dow_value_as_string:
       # do something
    if dow_value_as_string = "*":
       # do something else