#python #cron
#python #cron
Вопрос:
Я пытаюсь создать планировщик заданий cron на python, который извлекает расписание из базы данных и создает задания cron в Linux с использованием библиотеки crontab. но я не могу понять, как обойти ошибку «Непризнанный день недели:» при попытке добавить день недели, я хочу, чтобы cron запускался, когда он указан из массива. Любая помощь о том, как я могу это сделать, используя массив, была бы очень полезна.
from crontab import CronTab
from datetime import datetime
cron=CronTab('pi')
#the below line simulates grabbing the data from the database
row={'starttime':'2:56:00','sun':1,'mon':1,'tue':0,'wed':0,'thu':1,'fri':0,'sat':1}
#convert the "starttime" into the hour and minute to use on the cron
d=datetime.strptime(row['starttime'],'%H:%M:%S')
hour=d.strftime('%H')
minute=d.strftime('%M')
#figure out what day of week I want the cron to run on
dow=[]
if(row['sun'] == 1):
dow.append("Sun")
if(row['mon'] == 1):
dow.append("Mon")
if(row['tue'] == 1):
dow.append("Tue")
if(row['wed'] == 1):
dow.append("Wed")
if(row['thu'] == 1):
dow.append("Thu")
if(row['fri'] == 1):
dow.append("Fri")
if(row['sat'] == 1):
dow.append("Sat")
#create the job
job=cron.new(command='python /home/pi/Documents/blinktest.py', comment='Schedule')
job.minute.on(minute)
job.hour.on(hour)
job.dow.on(dow) #<- this is the line I get the "unrecognised day of week" error
#write the cron
cron.write()
Это ошибка, которую я получаю:
ValueError: Unrecognised Day of Week: '['Sun', 'Mon', 'Thu', 'Sat']'
Комментарии:
1. Вместо «Sun», «Mon», «Таким образом», «Sat» поместите «sun», «mon», «таким образом» и «sat»…. Все в нижнем регистре
2. Спасибо за предложение, но это все равно не работает. Я знаю, что строки правильные с заглавными буквами, потому что, если я изменю строку, которая выдает мне ошибку, на «job.dow.on (‘Mon’,’Tue’)», это отлично создаст задание cron. Похоже, что команде dow.on() не нравятся массивы, но форматирование выглядит точно так же, как массив.
3. это должно быть job.dow.on (* dow), а не звездочка перед аргументом ‘dow’
4. Спасибо! Добавление звездочки сработало!
Ответ №1:
На случай, если у кого-то еще возникла такая же проблема, как у user1438644, упомянутого в комментариях, изменение кода с
job.dow.on(dow)
Для
job.dow.on(*dow)
сделал свое дело.