我想使用apscheduler来安排python代码的执行,并且让用户能够指定他想要执行代码的日期或时间,我使用了 getopt 模块。 / p>
我如何检查用户是否传递了与用于cron-style schedule的表达式类型匹配的参数(*,* / a,ab,ab / c,xth y,last x,last,x,y,z )... 因为我的代码还有许多其他功能;我想在用户在执行其余代码之前输入无效表达式时引发错误 ...例如:如果用户已输入 - 分钟你好程序应该在用户提示被问到一些问题之前引发错误......
我尝试在apscheduler / triggers / cron目录下使用BaseField
类,但如果用户输入了有效的表达式,BaseField
没有引发错误,我可能会使用这是错误的方式!,但这是我试图做的:
import apscheduler.triggers.cron as f
f.BaseField('day','1') <<< Good: Doesn't raise an Error
f.BaseField('day','1,2') <<< Good: Doesn't raise an Error
f.BaseField('day','1-3') <<< Good: Doesn't raise an Error
f.BaseField('day','1,2,3') <<< Good: Doesn't raise an Error
f.BaseField('day','hello') <<< Good: Does rais an Error
f.BaseField('day','2th 7') <<< Not Good: Does raise an Error
f.BaseField('day','last mon') <<< Not Good: Does raise an Error
我也尝试使用下面的模式,并尝试将其与用户输入的内容相匹配,但如果用户已经过了&#34; last&#34;以下模式对我不起作用。或者&#34;最后一个&#34; ...(我在正则表达式方面不擅长)
Pattern = '(?P<first>\d+)(?:-(?P<last>\d+))?(?:/(?P<step>\d+))?$'
re.search(Pattern , passed_arguemtn , re.IGNORECASE)
请指导我:
1-我如何检查传递的参数。
2-是getopt的选项如--year --month --week ..etc看起来不错,或者我应该检查另一种时序格式,如YYYYMMDD和HHMMSS,这种格式是否适用于cron风格的表达式。
由于
答案 0 :(得分:0)
您的方法是正确的,但是您需要使用
BaseField
个用于验证的子类(当前)
here:
from apscheduler.triggers.cron import fields
try:
fields.DayOfMonthField('day', 32)
except ValueError as e:
print(e)
您还可以解析完整的cron表达式:
from apscheduler.triggers.cron import CronTrigger
try:
CronTrigger.from_crontab('61 * * * *')
except ValueError as e:
print(e)
根据您的要求和用户,两种方法都可以正常工作。 使用crontab表达式更易于实现和使用 适用于高级用户。单独处理每个字段可能更容易 用于某些用户,您也许可以使用专门的工具来创建UI 小部件,例如组合框,而不仅仅是行编辑。