在 python 中访问 APScheduler cron 触发器字段值

Access APScheduler cron trigger field values in python

类似于 我想从 APScheduler 中提取 cron 作业触发器的信息。 但是,我需要 "day_of_week" 字段而不是所有字段。使用

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"对象的'not an attribute'。我对这个 job.trigger 是什么类型的对象以及它的字段是如何打包的感到困惑。我尝试阅读github上的代码,但更令人费解。

如何只提取一个字段 day_of_week,这个触发器 class 的结构如何?

深入研究后发现

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,但我不知道如何处理dateval,get_value()的参数。

最终,在希望理解这个概念之后,我想做

if job-day_of_week contains mon

if job-day_of_week == '*'

print ( job-day_of_week )

感谢任何suggestions/hints!

查看代码,您应该能够获得 day_of_week 字段,而无需使用 CronTrigger class 的 FIELD_NAMES [=23 对索引进行硬编码=],例如

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