在 Python 中通过数组调用时,计划时间会被计划模块覆盖

Schedule times overwritten with Schedule module when called via array in Python

我正在尝试构建一个警报应用程序,但我正在努力让 'schedule' 模块按照我希望的方式运行。问题是我似乎无法在一天内安排 多个警报 同时通过数组调用 day 属性。

您通常如何在一天内多次安排的示例:

schedule.every().sunday.at('17:25').do(job)
schedule.every().sunday.at('17:30').do(job)
schedule.every().sunday.at('17:35').do(job)

这很好用,但我真的想用 for 循环加载时间,所以我没有巨大的 if 语句,这样我就可以动态加载时间:

dayArray = [
schedule.every().sunday,
schedule.every().monday,
schedule.every().tuesday,
schedule.every().wednesday,
schedule.every().thursday,
schedule.every().friday,
schedule.every().saturday
]

for i in range(1, xlsxAlarmSheet.ncols):
                for j in range(1, 8):
                    if(str(xlsxAlarmSheet.cell_value(j, i)) != '0'):
                        dayArray[j - 1].at(str(xlsxAlarmSheet.cell_value(j, i))[:2] + ':' + str(xlsxAlarmSheet.cell_value(j, i))[2:]).do(job)

正在通过 XLRD 模块从数组加载日期,从 xlsx 文件加载时间。唯一的问题是,当我一天安排多次时,警报会以某种方式相互覆盖。例如,如果我使用这种方法为星期日安排了 3 次,则只有第三次安排的时间会触发。我认为这一定是因为当我将日期加载到数组中时,它们不再是唯一的,所以我尝试做一个二维数组:

dayArray = [[
schedule.every().sunday,
schedule.every().monday,
schedule.every().tuesday,
schedule.every().wednesday,
schedule.every().thursday,
schedule.every().friday,
schedule.every().saturday
]] * (xlsxAlarmSheet.ncols - 1)

for i in range(1, xlsxAlarmSheet.ncols):
                for j in range(1, 8):
                    if(str(xlsxAlarmSheet.cell_value(j, i)) != '0'):
                        dayArray[i - 1][j - 1].at(str(xlsxAlarmSheet.cell_value(j, i))[:2] + ':' + str(xlsxAlarmSheet.cell_value(j, i))[2:]).do(job)

运气不好...时代还在互相覆盖,有什么想法吗?

免责声明:0 Python 经验,仅 JavaScript..... 但是...

尽量不要在这样的对象数组中调用函数:

dayArray = [[
schedule.every().sunday,
...

取而代之的是当天的名称(唯一不同的部分)

dayArray = [[
'sunday', 'monday', ...

然后在构建函数时在 for each 中使用该字符串名称

for each .... { schedule.every()[dayArray[i]].at(...).do(...) }

我的随机猜测是,以这种方式存储时它会以某种方式被错误调用,只需存储不同的部分(日期名称),因为您可以在循环中调用该函数的其余部分(因为它是所有人都一样)。

希望这是有道理的。不知道它是否会起作用,只是尝试一下。祝你好运。

我认为您可能需要使用索引来存储您的值。这 link 可能会有所帮助。 https://treyhunner.com/2016/04/how-to-loop-with-indexes-in-python/#What_if_we_need_indexes?

,我最初试图用字符串替换 day 属性,就像 Vig 在他对这个 post 的回答中建议的那样。这对我不起作用,所以我最终将对象存储在数组中,正如 Prune 在我最初的问题中所建议的那样。

但是,Prune 还 posted a link 了一个示例(示例 7),其中安排时间的整个调用存储在一个字符串中,然后通过 eval() 调用,这似乎有效。

这就是我最后做的事情:

dayArray = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday']
dayTimeArray = []

for i in range(1, xlsxAlarmSheet.ncols):
    for j in range(1, 8):
        if(str(xlsxAlarmSheet.cell_value(j, i)) != '0'):
            dayTimeArray.append(
                "schedule.every().{}.at('{}').do(StartSubProcess)".format(
                    dayArray[j - 1], 
                    str(xlsxAlarmSheet.cell_value(j, i))[:2] + ':' + str(xlsxAlarmSheet.cell_value(j ,i))[2:]
                )
            )

for i in range(0, len(dayTimeArray)):
    eval(dayTimeArray[i])