谷歌应用程序引擎中的 cron 具有用于 cron 作业调度的人类可读语法。

https://developers.google.com/appengine/docs/python/config/cron#The_Schedule_Format

如何在我的应用程序中实现类似的功能,其中使用以人类可读格式输入时间表并计划解析并存储实际值?

编辑:我认为他们正在使用 antlr3 库,但我无法弄清楚他们是如何使用它的。

有帮助吗?

解决方案

好的,在这种情况下,您需要研究两个地方。

首先,antlr 为您提供解析器,将英语/人类可读格式作为标记流解析到您的程序中。然后,您将根据该字符串确定含义,例如:

run backup every 2 days

这将变成一个令牌流,例如:

<command_type> := run
<command_to_run> := backup
<time_frame_times> := every
<digit> := 2
<time_frame_modifier> := days

然后,从这里您将使用某种状态机确定句子的含义,该状态机可以写成(简化形式)为:

if token == command_type:
    switch( token.val )
        case "run":
            state = run
            program = tokens.pop().val
if token == time_frame_times:
    switch( token.val )
        case "every":
            time_frame_state = repeat_indefinitely
if token == time_frame_modifier:
    switch( token.val )
        case "days":
            time_frame_modifier = every_N_days
if token == digit:
    switch( time_Frame_modifier )
        case every_N_days:
            time_frame_modifier_value = token.val

类似的东西足以将字符串解析为您所需的值。

第二部分是将其连接到 cron 或者在程序本身中编写自己的调度程序,我认为这更符合您的用例。

Antlr Python: http://www.antlr.org/wiki/display/ANTLR3/Python+runtime

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top